$; = $";
$;{Just=>another=>Perl=>Hacker=>} = $/;
print %;
Looks more understandable, now, right?
The first line sets the value of the special variable $;
to the value of $". $" is the list separator and has the
default value of a space. $; is the subscript separator,
which is used (or used to be used) for multidimensional
array emulation. As explained in perlvar. So saying
$foo{$a, $b, $c}
really means
$foo{ join $;, $a, $b, $c }
Since we've set $; equal to the value of $", the subscript
separator is now a space (' ').
Next line, then:
$;{Just=>another=>Perl=>Hacker=>} = $/;
Let's fix it up a bit:
$;{Just,another,Perl,Hacker,} = $/;
That actually isn't legal, though, because the special
=> makes it okay to use the barewords. If we replace
them with commas, we'll get errors. And that's why we
need the => after "Hacker"; if we take it off, we get
an error.
Anway, though, now it makes more sense, doesn't it? Because it looks
like the example above, the example from perlvar. We're
just assigning to a hash element in the hash %;.
And $/ is the input record separator, the default of which
is a carriage return ("\n"). So we assign that value to
the hash element, so what we really have is something like
this:
$;{ join ' ', "Just", "another", "Perl", "Hacker", "" }
= "\n";
Which is just this:
$;{"Just another Perl Hacker"} = "\n";
And then we're at the last line:
print %;
Which is very simple. We're just printing out the hash
%;, which we just assigned to. In list context, the hash
is flattened to a list. This list, in fact:
("Just another Perl Hacker", "\n")
And what happens when we print out that list? Just what
you'd expect:
Just another Perl Hacker
So that's it. Doesn't it make you love Perl? :) |