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/


Reply via email to