> I'm sorry about that. I didn't mean to flame
> you. It just
> seemed like you were taking the long way around to
> solve the
> problem.
>
It was a year ago. I don't remember who it was, and
it's not a big deal anymore.
>
> That's funny. When I started reading the
> documentation a few
> years ago, I got the distinct impression that only
> programmers
> with a background in C were being invited to the
> perl party. I
> even complained about it on the another beginner
> email list.
>
My background in C extends to pointers -- I'm still
the novice there. :)
<snip>
> Okay. In perl everything is passed into the sub
> with a special
> array called @_. Let's call a subroutine named
> link(). (I'm going
> to use list and array interchangeably here. They're
> not really the
> same though.)
>
> print link( '/perl/', 'Learning Perl' );
>
> Behind the scenes, perl creates a list of the
> two arguments
> '/perl/' and 'Learning Perl' and sets it equal to
> @_. It then
> passes control to link().
>
Before we go on, what if you had $a='/perl/'; $b =
'Learning Perl';
then did:
print link($a, $b); <-that's how I'd pass
information, as variables, not literals.
Does this change what comes next?
> Inside link() we need to access @_ to get to the
> arguments.
> What is declared on the subroutine declaration line
> is not use by
> perl to transfer subroutine arguments. It is only
> used for type
> checking.
>
> Let's write link():
>
> sub link {
> my( $href, $name ) = @_;
> return qq(<a href="$href">$name</a>);
> }
>
> It is pretty obvious how the we accessed @_
> here, but in
> ParseLineForHomeAndVisitors() we have this:
>
> sub ParseLineForHomeAndVisitors($line) {
> my $line = shift;
> my @teams = ( $line =~ /([[:alpha:]]+)/g );
> return @teams;
> }
>
> The second line is accessing @_. 'shift'
> operates on @_ by
> default, so
>
This is all making sense, sort of like when shift
operates on $_.
> my $line = shift;
>
> is shorthand for:
>
> my $line = shift @_;
>
>
> In perl, declaring subs at the top of the script
> is necessary
> when using prototypes.
It's not necessary otherwise? Like:
#sub declarations
sub ParseLineForHomeAndVisitors;
sub link;
That's how I do it, whether or not there is something
I want to pass or return with the sub.
>Prototypes in perl do not
> work the way you
> are using them. They do not declare a variable. They
> restrain the
> type of values which can be passed to a subroutine.
>
So when Cozens uses something like:
sub link($$);
if he were passing arrays, he'd do:
sub link(@@);
and hashes:
sub link(%%);
Is that correct? That's what it seems you are saying.
> Perl prototyping handles this type checking for
> the
> programmer, but it still uses @_ to pass arguments
> for the sub. I
> have always found prototypes too restrictive. I
> understand why you
> are using them, but I still think life will be
> easier if you
> abandon them.
>
Restrictive, but protective. I find perl to allow too
much freedom. And, as a novice programmer, I'd rather
be as clear as day. But I see your point.
<snip>
> I agree. However, that shouldn't be the goal (in
> perl) for a
> beginner. It is possible, but it requires the
> knowledge you'll
> obtain by using some data structures.
>
I'm not sure what you're saying here.
>
> : And then below, I'd have a section called sub
> definitions, where
> : I'd define all those subs, and maybe others that
> made up those
> : subs. Writing like this is easier on my eyes and
> tells me and
> : someone else (given my subs have descriptive
> names) a very good
> : idea of what I want to do. I write subs for
> printing out a few
> : lines of intro instructions. It just makes sense
> to me. So
> : that's why a sub.
>
> In perl, one problem with using a sub this way
> is that it
> forces the use of global variables. If
> %AbbrevAndNicknames has not
> been declared above the subroutine, how else will
> you pass it
> around the script?
>
Hmm, not sure. I used to be able to do it in C,
without globals, but I haven't gotten that far in
perl.
<snip>
> You might want to depend on the documentation
> that comes with
> perl more than the book you are using. 'perlfunc'
> has a listing of
> almost all the the functions you'll see here.
> Perldoc.com has
> handy html documentation for the major versions of
> perl. 'Perlsub'
> does a better, deeper job than me with subroutines.
>
Yeah, I had this problem before. Someone told me to
go to STart->Program Files->ActiveSTate 5.8->
Documentation
This gave me what I find at the manpages, not perldoc.
It was laid out well, but it was confusing.
> Here is a small script to show typical
> processing of a file in
> perl. Instead of opening a file. I'll use the
> special file handle
> DATA, which is everything past the __END__ tag in
> this script.
> Hopefully, it will give you a basis for writing subs
> in perl.
>
> #!/usr/bin/perl
>
> use strict;
> use warnings;
> use Data::Dumper 'Dumper';
>
> # @teams is at file level scope. Perl allows
> # it to be used anywhere in this file (script).
> # We assume responsibility not to use it as a
> # global variable.
> my @teams;
>
> # $line is scoped within this while block
> # It disappears after the brace ends the block.
> while ( defined( my $line = <DATA> ) ) {
>
> # This goes to the next line unless we get
> # a match for teams.
> next unless $line =~
> /^[[:alpha:]]+\s+[[:digit:]]+,/;
>
> # We have a match, let's fetch the teams
> @teams = fetch_teams( $line );
>
> # Stop processing the file
> last;
> }
>
> # Dumper() provides an easy method to see
> # the composition of even complex data structures
> print Dumper [EMAIL PROTECTED];
>
> # At this point <DATA> will point to the third
> # line '1st Period'
>
> while ( defined( my $line = <DATA> ) ) {
> #
> # process the stats
> #
> }
>
> sub fetch_teams {
> my $line = shift;
> return ( $line =~ /([[:alpha:]]+)/g );
> }
> __END__
>
> Spurs 94, Suns 82
> 1st Period
> (12:00) Jump Ball Robinson vs Williams
> (11:41) [PHX] Marion Turnaround Jump: Missed
>
> ------------------
I understand this one, but not the one below.
I'm not sure what is supposed to be in @_. And I'm a
bit confused why you're using a reference.
little help?
__________________________________
Do you Yahoo!?
Yahoo! Mail - More reliable, more storage, less spam
http://mail.yahoo.com
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>