【问题标题】:What is Perl's $; variable for?Perl 的 $ 是什么?变量为?
【发布时间】:2011-01-13 04:35:02
【问题描述】:

是否有任何 1 知道以下代码 sn-p 中的 $;(第一个拆分函数参数)是什么:

      local(@a) = ();
      local($i) = 0;
      for ($i = 0; $i < $d; $i++) {
         @a = split($;, @b[$i]);
         $c     = @a[0];
      }

在脚本中除 for 循环之外的任何地方都找不到标量。

感谢任何帮助。

【问题讨论】:

  • 哇,那一定是一些旧代码。
  • 必须是 真正 旧代码 -- $; 在 Perl 5, IIRC 的第一个版本中被弃用。在 Perl 4 之后它肯定没有用了。
  • 不,它没有被弃用; perl4 风格的多维数组在您拥有非常大、稀疏的数据结构并且只关心叶子的情况下仍然很方便。
  • '$;'使用 'local'、非列表 'for' 和 '@a[0]' 而不是 '$a[0]' 表示旧的 Perl 4 代码。

标签: perl scalar


【解决方案1】:

Perl 的特殊变量记录在perlvar,包括$;

$SUBSEP

$;

多维数组模拟的下标分隔符。如果您将哈希元素称为

$foo{$a,$b,$c}

真的是这样

$foo{join($;, $a, $b, $c)}

但不要放

@foo{$a,$b,$c}  # a slice--note the @

意思是

($foo{$a},$foo{$b},$foo{$c})

默认为"\034",与awk中的SUBSEP相同。如果您的密钥包含二进制数据,$; 可能没有任何安全值。 (助记符:逗号(句法下标分隔符)是一个分号。是的,我知道,它很蹩脚,但 $, 已经被认为是更重要的东西。)

考虑使用perllol 中所述的“真实”多维数组。

我们可以猜测为什么要使用它(例如,也许@b 包含一些哈希键),但是知道@b 是如何创建的会让我们提供更多有用的答案。

还要注意@b[$i] 和@a[0] 应该是

$b[$i]

和

$a[0]

相反。使用前导 @,它们是单元素数组切片,但使用 $,它们是简单的标量。

【讨论】:

    【解决方案2】:

    Perl 特殊变量在perlvar 中列出。

    【讨论】:

    • 当你可以链接到官方 Perl 文档时,你为什么要链接到一些随机的(和过时的)页面?
    • 注:brian d foy 编辑了问题,现在链接到官方文档。
    猜你喜欢
    • 2012-07-20
    • 1970-01-01
    • 2022-09-27
    • 2013-06-25
    • 1970-01-01
    • 2012-07-12
    • 2012-06-26
    • 1970-01-01
    • 2021-03-17
    相关资源
    最近更新 更多