我遇到了这两行,尽管我一直试图弄清楚它们的作用,但我仍然怀疑它们在代码中的含义。我正在谈论的一段代码是:
my $mapped_from = ($num_phones_in == 60)? = $1 : $2;
my $mapped_to = ($num_phones_out == 48)? = $2 : $3;
Run Code Online (Sandbox Code Playgroud)
我真的不明白括号之间的变量是什么,后跟问号 do ()?。而且我也不知道这两个用冒号分隔的美元符号(作为变量)是什么意思。
为了向您提供有关代码的更多详细信息,在这一部分中,我正在处理一个如下所示的文件:
ah X /
au u aU
Run Code Online (Sandbox Code Playgroud)
其中列分别有 60、48 和 39 行。如果有人能给我一个线索,我真的很感激,因为我有点迷失了。
ilk*_*chu 14
my $mapped_from = ($num_phones_in == 60)? = $1 : $2;
Run Code Online (Sandbox Code Playgroud)
那是语法错误。该test ? val_true : val_false
是“三元运算符”,一个的内联形式if-else
声明。如果test
为真,则对val_true
零件求值,如果test
为假,则对val_false
零件求值。问号与括号无关。但= $1
不是一个有效的表达。
如果没有额外的=
,($num_phones_in == 60)? $1 : $2;
将检查是否$num_phones_in
为六十,并相应地返回$1
或返回$2
。
$1
和$2
(等)是引用前一个正则表达式中捕获组内容的变量。如果你这样做了"afoob" =~ /a(.*)b/
,那么$1
将包含foo
. 请参阅perlvar 中与正则表达式相关的变量。
在? :
被称为三元运算符,并且被认为是在任何现代语言滥用最多的运营商之一。(特别是嵌套的三元运算符。)这两行是等价的:
$value = ($a > 9) ? 10 : 0;
if ($a > 9) { $value = 10 } else { $value = 0 };
Run Code Online (Sandbox Code Playgroud)
该$1
和$2
你还问是在最近的正则表达式匹配括起来的结果。例如,
$a = 'Hello world. 1+2 is 3';
$a =~ /(\w+).*?(\d+)/;
print "1=$1, 2=$2\n";. # "1=Hello, 2=1"
Run Code Online (Sandbox Code Playgroud)