4 ms·
Why is this difficult to understand? my @foo = qw(1 2 3); $foo[0] = 1; you are referencing an array and returning a scalar. the sigil represents a scalar which
by matt_p 16y ago
Why is this difficult to understand?
my @foo = qw(1 2 3);
$foo[0] = 1;
you are referencing an array and returning a scalar. the sigil represents a scalar which is what is returned. A list isn't being returned, so why should the sigil represent that?
- aaronblohowiak 16y agoWhy require context-dependent sigils when you don't need to? Eliminate the unnecessary.
- phamilton 16y agofor the same reason strcmp() returns not just a -1,0, or 1, but a "distance" between the two strings being compared. A function or syntax has multiple uses if additional information is available to the programmer. Example: @array = qw(1 2 3); $length = @array; print $length; By allowing a non scalar to take an implicit scalar form, we have an extremely useful and quick way to get the length of an array. Nothing that difficult to replace with a len() call, but it's language features like these that make perl ($length = @_ may be the most useful of all) so handy for quick hacks.
- jordandanford 16y agoI guess my problem with something like that is that conceptually it doesn't make much sense. There's no obvious reason why assigning an array to a scalar variable would give its length – it doesn't really feel clear or elegant, just unexpected.
- chromatic 16y agoWhy require context-dependent sigils when you don't need to? That's a circular argument. So is "Why not require them when you need them?"
- jordandanford 16y agoI understand the idea behind it, but I don't feel like it's any clearer than "foo = [1, 2, 3]; foo[0] = 1" (in Ruby, Python, or something similar). This was even changed in Perl 6 because the different sigils just increased obfuscation: http://en.wikipedia.org/wiki/Perl_6#Sigil_invariance http://en.wikipedia.org/wiki/Perl_6#Sigil_invariance