ciwei wrote:
Question from a newbie: how to properly use space
when reference to variables, array, hash etc.
please see the code below:
why the first line, second, and third line all output differiently.
thanks.
ciwei
========code below ======
#!/usr/bin/perl
The next two lines should be:
use warnings;
use strict;
my %ttys =();
open ( WHO, "who|") or die "can;t \n";
You should include the $! variable in the error message so you know why
open() failed:
open WHO, 'who |' or die "Cannot open pipe from 'who' $!";
while ( <WHO> ){
( $user, $tty ) = split ;
push @{$ttys{ $user}} , $tty;
}
You should also close the pipe and verify that it closed correctly:
close WHO or warn $! ? "Error closing 'who' pipe: $!"
: "Exit status $? from 'who'";
foreach $user ( sort keys %ttys ){
print "first line : $user => @{$ttys {$user}} \n";
print "second line: $user => @ {$ttys { $user}} \n";
print "third line: $user => @{$ttys{$user}} \n";
}
__OUTPUT__
first line : root =>
second line: root => @ { { root}}
third line: root => pts/1 pts/4 pts/6 pts/7 pts/8
If you had warnings and strict enabled you would have got this output
instead:
$ perl -e'
use warnings;
use strict;
my $user = "root";
my %ttys = ( $user => [ qw(pts/1 pts/4 pts/6 pts/7 pts/8) ] );
print "first line : $user => @{$ttys {$user}} \n";
print "second line: $user => @ {$ttys { $user}} \n";
print "third line: $user => @{$ttys{$user}} \n";
'
Global symbol "$ttys" requires explicit package name at -e line 6.
Global symbol "$ttys" requires explicit package name at -e line 7.
Execution of -e aborted due to compilation errors.
John
--
Perl isn't a toolbox, but a small machine shop where you
can special-order certain sorts of tools at low cost and
in short order. -- Larry Wall
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/