gpt4 book ai didi

perl - perl 中括号/括号的使用规则 (?)

转载 作者:行者123 更新时间:2023-12-04 00:58:41 25 4
gpt4 key购买 nike

做了一些搜索,但找不到任何有用的东西。
我想知道是否有一个排序汇总表供初学者了解使用括号/括号的“规则”,特别是 ()、[]、{} 之间的区别。
不幸的是,根据我的经验,use strictuse warnings不要告诉我我是否使用了错误的括号。

例如,下面是合法代码(b/c 它们来自 ikegami)。

@{"genotype".($i)}
@{$genotype[$i]}
$genotype[$i] = [ split (/:/, $original_line[$i])]
my @genotype = map {[split /:/]} @original_line[6..14]

但是下面的这些也是合法的吗?很多时候(对我来说)很难知道是否是代码的其他部分(逻辑)导致了问题。对我(一个初学者)来说,对我(初学者)进行排序似乎对良好的编码来说是微不足道的。任何关于如何正确使用括号的指南都会很棒。
@{"genotype".[$i]}
@["genotype".($i)]
@("genotype".($i))
@{$genotype($i)}
@[$genotype($i)]
$genotypes[$i] = ( split (/:/, $original_line[$i]))
my @genotype = map ([split /:/]) @original_line[6..14]

最佳答案

在 Perl 中,方括号、大括号和圆括号都有多种含义,但花括号可能是最多的。

  • 帕伦斯
  • 排序优先级2 * 3 + 42 * (3 + 4) .
  • 为函数定界的参数列表是这种情况的一个子情况:join "", 1, 2, 3join("", 1, 2), 3
  • 用箭头运算符包围方法调用的参数列表:$foo->bar(1, 2) (空 arglist 不需要)
  • 强制将前一个裸字解释为子例程调用。比较 Foo->newFoo()->new .
  • 使用箭头运算符调用 coderefs:$code->()
  • 子程序原型(prototype) sub foo ($$;$%) { ... }
  • 方括号
  • 数组下标运算符 my @array = 1 .. 5; $array[1]
  • Arrayref 文字 my $aref = [1 .. 5]
  • 大括号
  • block (用于 dosubmapgrep、条件、循环结构、裸 block 、标记 block ……)
  • 哈希下标运算符 $hash{foo}
  • Hashref 字面量 my $hashref = { a => 3, b => 2 }
  • 与格print { $filehandles[5] } "Hello world"
  • Circumfix 取消引用运算符 @{ $aref } , %{ $hashref } , ...
  • 包 block 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]使用括号进行数组下标。 = [ ... ]使用方括号创建匿名数组引用。 split(/:/, ...) 中的括号只需为 split 分隔参数列表即可(整理优先级)。
    my @genotype = map {[split /:/]} @original_line[6..14]@original_line[6..14] 中使用括号作为数组下标运算符, 对于 [split /:/] 中的匿名数组. curl 用于形成一个 block 作为 map 的第一个参数。 .

    关于perl - perl 中括号/括号的使用规则 (?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16153618/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com