4 ms·
> 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
by __david__ 12y ago
> 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]);
- deleted 12y ago[deleted]
- EdwardDiego 12y ago> it's two concepts: "collection", and "pointer to collection". I guess coming from C that didn't bother me too much 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.