9

$;次のコード スニペットの (最初の分割関数の引数) が何かわかりますか?

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

スカラーは、for ループ以外のスクリプト内のどこにも見つかりません。

どんな助けでも大歓迎です。

4

2 に答える 2

13

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})

デフォルトはで、 awk"\034"と同じです。SUBSEPキーにバイナリ データが含まれている場合、 の安全な値がない可能性があります$;。(記憶法: コンマ (構文上の添え字の区切り記号) はセミセミコロンです。ええ、私は知っています。それはかなり不自由ですが、$,すでにもっと重要なことに使用されています。)

perllolで説明されているように、「実際の」多次元配列を使用することを検討してください。

なぜそれが使用されているのか (たとえば@bいくつかのハッシュ キーが含まれている可能性がある) については推測できますが、どのように作成されるかを知ることで@b、より役立つ答えを提供できます。

また、おそらくそうあるべきであること@b[$i]に注意してください@a[0]

$b[$i]

$a[0]

代わりは。先頭の@では、それらは単一要素の配列スライスですが、$では単純なスカラーです。

于 2010-02-04T17:25:18.067 に答える
0

Perl の特殊変数はperlvarにリストされています。

于 2010-02-04T17:34:17.313 に答える