Neden bu Perl edilir: "cd" olarakPerl substr (STRING, @ARRAY) ne altstr (STRING, OFFSET, LENGTH)?
@x=(0,2);
substr('abcd',@x)
değerlendirdi?
Ve bu: "ab" olarak değerlendirilen
substr('abcd',0,2);
? skaler bağlamda
Neden bu Perl edilir: "cd" olarakPerl substr (STRING, @ARRAY) ne altstr (STRING, OFFSET, LENGTH)?
@x=(0,2);
substr('abcd',@x)
değerlendirdi?
Ve bu: "ab" olarak değerlendirilen
substr('abcd',0,2);
? skaler bağlamda
ilk kullanımları @x
... @x
yüzden substr('abcd',2)
cd
verir boyutunu anlamına gelir.
substr olarak bir prototip yerleşik bir işlevi, yani 2 döndüren bir skaler bağlamda, içinde değerlendirilir genişletilmediğinde @x, böylece temelde ((@x) skaler, 'abcd') substr aradığınız
substr
operatörün belgelenmiş sözdizimi
substr EXPR,OFFSET,LENGTH,REPLACEMENT
substr EXPR,OFFSET,LENGTH
substr EXPR,OFFSET
değil
substr EXPR,ARRAY
veya daha genel olan
substr EXPR,LIST
Bu, prototype
çıktısında yansıtılır (her zaman buna güvenemeyebilirsiniz).
$ perl -E'say prototype "CORE::substr"'
$$;$$
substr
'ın 1 argümanı skaler bağlamda değerlendirilir. İkinci argüman skaler bağlamda değerlendirilmiştir.substr
'ın üçüncü bağımsız değişkeni (isteğe bağlı) skaler bağlamda değerlendirilir.substr
'un 4. bağımsız değişkeni (isteğe bağlı) skaler bağlamda değerlendirilir. skalar bağlamda@x
içerdiği elemanlarının (bu durumda 2
) 'dir.
Sen şu kullanarak istediğiniz neyi elde edebilirsiniz:
yeni bir şey öğrendimsub mysubstr {
if (@_ == 2) { substr($_[0], $_[1]) }
elsif (@_ == 3) { substr($_[0], $_[1], $_[2]) }
elsif (@_ == 4) { substr($_[0], $_[1], $_[2], $_[3]) }
else { die }
}
my @x = (0, 2);
mysubstr('abcd',@x)
1; aydınlatma hızlı yanıtlar için) – Sorin
teşekkürler – user1087245