http://qs321.pair.com?node_id=67690


in reply to Re: Populating an array
in thread Populating an array

When our student friend turns in his assignment he should be sure to add single quotes around filename on line number 4.

He should also add comments explaining what is going on and add some code to print out the array values. A final result (containing the obfuscatory dereferenced reference) is thus:

#!/usr/bin/perl -w use strict; use IO::File; use constant FILENAME => 'filename'; #Replace filename with name of in +put file. my $file = IO::File->new( "< ". FILENAME ) or die "Failed to open '@{[FILENAME ]}', $!"; # Dereferenced array + ref and OS error my @elements; { local $/ = $/.$/; #Replace default input delimeter (\n) with (\n\n +) @elements = <$file>; } $file->close(); #Now test to see that everything reads out okay print "Here are the elements of the array:\n"; for (my $i = 0; $i < @elements; $i++) { print "Element number $i of the array is:\n$elements[$i]\n"; }
If our friend makes some effort to understand what he has submitted then he will have learned his lesson well. Maybe we will see him here with Tye and Merlyn someday.

Replies are listed 'Best First'.
Re: Re: Re: Populating an array
by Adam (Vicar) on Mar 28, 2001 at 04:27 UTC
    Good catch on the quotes around the filename. I intentionally left it all uncommented. But lets have some more fun with it:
    #!/usr/bin/perl -w use strict; use IO::File; use constant FILENAME => 'filename'; { package cntr; sub TIESCALAR{bless[pop],__PACKAGE__} sub FETCH{ $_[0][0]++ } } my $file = IO::File->new( "< ". FILENAME ) or die "Failed to open '@{[FILENAME]}', $!"; my @elements; { local ( $a, $/ ) = $/.$/; @elements = split $a => <$file>; } $file->close(); print "Here are the elements of the array:\n"; tie my $i, 'cntr', 1; print map {$i.': {'."$_}$/"} @elements;
    Yeah, that would go over well with a teacher or professor.

    Update: So I changed the code a little from the original post. I actually tested it, and didn't like the way the newlines hung around. This fixes that. View source for the old code.