Orada Perl hakkında "bilmek" birkaç şey vardır:Neden scalar sub {(@x, @y)} ->() scalar @y döndürüyor?
- listeleri
- fonksiyonları almak düzleştirmek ve dönüş listeleri
Bunu alabilir Yani eğer:
sub my_test {
my @x = qw(a b c);
my @y = qw(x y z t);
return (@x, @y);
}
say my_test; # a b c x y z t
say scalar my_test;
I İki sonuç değerinden birini bekliyoruz:
7
, çünkü bu öğeqw(a b c x y z t)
listesinde kaç öğe var. Gerçekten de bu,scalar sub { @{[ qw(a b c x y z t) ]} }->()
'dan aldığım şey. virgül operatörüyle (nefes) olarak virgül yorumlamak eğer('a', 'b', 'c', 'x', 'y', 'z', 't')
olsun, çünkü't'
,
't'
olarak değerlendirilirse hangi. Aslında,
scalar sub { qw(a b c x y z t) }->()
'dan aldığım şey bu.
Bunun yerine ne alabilirim & hellip olduğu; 4, uyarı olmadan. Neden bir liste yassılaştırma ve virgül operatörü karışımı aldım?
sağlamalarının ve bu oldukça popüler desenliBenzer hikayesi:
scalar
default_override_hash
üç karmaları döndü biliyoruz ve olması gerektiği değil sadece
%overrides
(ve her şeyi değil,
''
) elde eder nasıl
sub default_override_hash {
my %defaults = (foo => 'bar', egg => 'quuz');
my %values = @_;
my %overrides = (__baz => '');
return (%defaults, %values, %overrides);
}
scalar default_override_hash; # '1/8'
ama skaler temsili bir karma olarak mı?
Ben bekliyoruz tahmin 'scalar' alt my_scalar {benim @input = @_' gibi olmak; skallar @scalar; } ' – badp
İlgili: http://stackoverflow.com/q/8232951/133939 – Zaid