@files = { local(@ARGV, $/) = @filenames; <> }; # missing 'do'
Should actually be:
@files = do { local(@ARGV, $/) = @filenames; <> };
And your index hash:
@foo{ @foo } = 0 .. @foo; # off-by-one error
Should be:
@foo{ @foo } = 0 .. $#foo;
| [reply] [d/l] [select] |
You are right about the slurp, a typo on my part.
But the indexing will work. The extra number (int @foo) will just be ignored because there won't be a corresponding lvalue.
Ted :->
| [reply] |
1 is not prime.
Neither is 0. | [reply] |
| [reply] |
The @foo{ @foo } = 0 .. @foo; seems very clever to me (not to mention useful), but being a bit of a newbie, I don't really understand how it works. Anyone care to enlighten me? | [reply] |
It's creating a hash named %foo using a hash slice built out of the elements in @foo. Then it's assigning to that slice the values 0 to (the number of elements). So if @foo = ('a', 'b', 'c'), you get
@foo{'a', 'b', 'c'} = (0, 1, 2);
which is itself just shorthand for
$foo{'a'} = 0;
$foo{'b'} = 1;
$foo{'c'} = 2;
(technically, @foo in scalar context returns a value one too large, so we're really mapping to (0,1,2,3), but the odd element gets ignored. It might be more proper to use $#foo there (the index of the last element, instead of the number of elements)) | [reply] [d/l] [select] |
Aaaaaaaah... That was clever. Thanks!
| [reply] |
You want to look up hashslices. That's going to be the key.
------
We are the carpenters and bricklayers of the Information Age.
Then there are Damian modules.... *sigh* ... that's not about being less-lazy -- that's about being on some really good drugs -- you know, there is no spoon. - flyingmoose
I shouldn't have to say this, but any code, unless otherwise stated, is untested
| [reply] |