B C*_*hen 12 perl square-bracket curly-brackets
做了一些搜索但找不到任何有用的东西.我想知道是否有一个摘要表,供初学者了解使用parens/bracket的"规则",特别是(),[],{}之间的差异.不幸的是,根据我的经验,use strict并use warnings没有告诉我,如果我使用错误的parens.
例如,下面是合法代码(b/c来自ikegami).
@{"genotype".($i)}
@{$genotype[$i]}
$genotype[$i] = [ split (/:/, $original_line[$i])]
my @genotype = map {[split /:/]} @original_line[6..14]
Run Code Online (Sandbox Code Playgroud)
但这些下面也是合法的吗?通常情况下(对我来说)知道代码的其他部分(逻辑)是否导致问题是很困难的.通过parens对我(初学者)进行排序对于良好的编码似乎微不足道.任何关于如何正确使用parens的指南都会很棒.
@{"genotype".[$i]}
@["genotype".($i)]
@("genotype".($i))
@{$genotype($i)}
@[$genotype($i)]
$genotypes[$i] = ( split (/:/, $original_line[$i]))
my @genotype = map ([split /:/]) @original_line[6..14]
Run Code Online (Sandbox Code Playgroud)
amo*_*mon 11
在Perl中,括号,括号和parens都有多种含义,但花括号可能最多.
2 * 3 + 4与2 * (3 + 4).
join "", 1, 2, 3vs.join("", 1, 2), 3$foo->bar(1, 2)空arglist不需要)Foo->new和Foo()->new.$code->()sub foo ($$;$%) { ... }my @array = 1 .. 5; $array[1]my $aref = [1 .. 5]do,sub,map,grep,条件,循环结构,裸块,标记块,...)$hash{foo}my $hashref = { a => 3, b => 2 }print { $filehandles[5] } "Hello world"@{ $aref },%{ $hashref }...package Foo { ... }......几乎所有字符都可以用作分隔符报价般的运营商q//,qq//,qr//,qx//,m//,s///,tr///,y///,导致像有趣的东西s(foo){bar}g
@{"genotype".($i)} 使用curlies进行符号解除引用,并使用parens(不必要地)排除优先级.
@{$genotype[$i]} 使用括号作为数组下标运算符,并使用curlies进行解除引用
$genotype[$i] = [ split (/:/, $original_line[$i])]有各种各样的部分:$genotype[$i]并$original_line[$i]使用括号进行数组下标.在= [ ... ]使用括号使一个匿名数组引用.parens split(/:/, ...)只是界定参数列表split(排除优先级).
my @genotype = map {[split /:/]} @original_line[6..14]使用括号作为数组下标运算符@original_line[6..14],并使用括号作为数组下标运算符[split /:/].curlies用于形成一个块作为第一个参数map.