1

印刷しようとしている配列の配列があります(SQLデータベース情報を取得するために使用されます):

my $variables_array = [[u1, answer1, Uvalue], ["v1", u2, v2, answer2, Vvalue]];

私が印刷するとき$variables_array、を除いてすべての変数v2は私が上で持っているフォーマットで印刷されます。google / SOを検索しましたがv#、Perlで特別な意味を見つけることができませんでした。notepad ++が配列の配列の色を変更して、v#それが何らかの特別な変数であることを示していることに気づきましたが、それが何であるかわかりませんか?誰かが私のためにこれにいくつかの光を当ててくれませんか、私は混乱しています。

4

2 に答える 2

8

Perlには多くの異なるリテラルがあります

  • 123、、、123.0のよう1.23e2な数字0x7b
  • 文字列リテラル、、、、"abc"… </ li 'abc'>q/abc/
  • ベアワード
    • ベアワードは、パラメータリストのない関数呼び出しのように見えます
    • 特別な場所では、これは厳格な状況下でも問題ありません。Foo::Bar->new()
    • なしstrict 'refs'の場合、サブを意味しないベアワードは文字列として扱われます。
    • ファットコンマのLHS=>は常に自動引用されます
    • ファイルテスト演算子でない限り、先頭にマイナスが付いたベアワードは常に文字列です。-abc eq "-abc"
  • V文字列(ベクトルまたはバージョンのV)。v1.2.3

V文字列は、ピリオドで区切られた一連の数字で構成されます。それぞれの数字は対応する文字に変換されます。文字列なので、、などと比較できltますgt

たとえば、IPアドレスやバージョン番号に適しています。数字が小さいと印刷できない文字を意味するため、印刷には適していません。

$ perl -E'say v49.50.51'
123

物語の教訓は?常にuse strict; use warnings;、そして多分qw//引用演算子を調べてください:

my $variables_array = [[qw/u1 answer1 Uvalue/], [qw/v1 u2 v2 answer2 Vvalue/]];
# or verbose:
my $variables_array = [['u1', 'answer1', 'Uvalue'], ['v1', 'u2', 'v2', 'answer2', 'Vvalue']];

qw補間せず、任意の空白で文字列を分割し、文字列のリストと同じです)

于 2013-02-08T14:52:24.600 に答える
3

厳密な警告も警告もありませんが、次のようになります。

$variables_array: [
                    [
                      'u1',
                      'answer1',
                      'Uvalue'
                    ],
                    [
                      'v1',
                      'u2',
                      v2,
                      'answer2',
                      'Vvalue'
                    ]
                  ]

amonの答えは、それらが「ベアワード」であると説明しています。ベアワードは、ほとんどすべてのコンテキストで非推奨になっています(ただし、コマンドラインスクリプトではない可能性があります)。

バージョン文字列(-で始まる数値)はPerlの有効なリテラルであるため、引用符では'v1'なく引用符で囲まれていることに注意してください。'v2'v

于 2013-02-08T14:59:31.243 に答える