|
> Except now, I have two ways of working with Perl's collections, two separate sets of sigils, and all because I wanted to pass two collections into a function and Perl treats function arguments as a collection, and Perl implicitly flattens collections. It's not really two sets of sigils, it's two concepts: "collection", and "pointer to collection". I guess coming from C that didn't bother me too much—once it sunk that references were just (safe) pointers, using them works almost exactly the same: int a = 1, *b=&a, **c=&b, ***d=&c;
printf("%d %d %d %d\n", a, *b, **c, ***d);
my $a = 1; my $b=\$a; my $c=\$b; my $d=\$c;
printf("%d %d %d %d\n", $a, $$b, $$$c, $$$$d);
Perl even stole C's pointer syntax to make working with collections nice: my $a = [1,2,3];
printf("%d\n", $a->[0]);
|
Fair point. I guess what bugs me is that you can use collections merrily without references until you want to pass more than one collection to a function - or create a collection that isn't flattened - at which point you have no choice.