[英]Perl substr(STRING, @ARRAY) ne substr(STRING, OFFSET, LENGTH)?
為什么在Perl中:
@x=(0,2);
substr('abcd',@x)
評價為“cd”?
和這個:
substr('abcd',0,2);
評價為“ab”?
substr
運算符的文檔語法是
substr EXPR,OFFSET,LENGTH,REPLACEMENT
substr EXPR,OFFSET,LENGTH
substr EXPR,OFFSET
不
substr EXPR,ARRAY
或更通用的
substr EXPR,LIST
這反映在prototype
的輸出中(盡管你不能總是依賴於此)。
$ perl -E'say prototype "CORE::substr"'
$$;$$
substr
的第一個參數在標量上下文中進行評估。 substr
的第二個參數在標量上下文中計算。 substr
的第三個參數(可選)在標量上下文中計算。 substr
的第四個參數(可選)在標量上下文中進行評估。 標量上下文中的@x
是它包含的元素數(在本例中為2
)。
您可以使用以下方法實現您想要的目標:
sub 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)
substr有一個原型作為內置函數,所以@x未展開是在標量上下文中計算的,它返回2,所以基本上你調用substr('abcd',scalar(@x))
第一個在標量上下文中使用@x
...意味着@x
的大小因此substr('abcd',2)
給出了cd
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.