7

本質的に、配列を取り、その配列の要素を改行で区切った単一の文字列を作成したいと考えています。

という名前の配列があり$zonesます。への参照を出力すると、$zonesそれが配列であることを確認できます。

次のコード:

print_log(Dumper($zones));
print_log('-------');
print_log(Dumper(join("\n",$zones)));

次の出力が得られます

  [2013-06-15 16:23:29 -0500] info [dnsadmin] $VAR1 = [
          'fake.com25',
          'fake.com2',
          'fake.com27',
          'fake.com43',
          'fake.com41',
          'fake.com40',
          'fake.com39',
          'fake.com37',
          'fake.com36',
          'fake.com35',
          'fake.com31',
          'fake.com56',
          'fake.com55',
          'fake.com54',
          'fake.com53',
          'fake.com52',
          'fake.com51',
          'fake.com50',
          'fake.com49',
          'fake.com48',
          'fake.com42',
          'fake.com38',
          'fake.com34',
          'fake.com33',
          'fake.com32',
          'fake.com30',
          'fake.com29',
          'fake.com28',
          'fake.com26',
          'fake.com24',
          'fake.com23',
          'fake.com69',
          'fake.com68',
          'fake.com67',
          'fake.com66',
          '0',
          'fake.com44',
          'fake.com45',
          'fake.com46',
          'fake.com278'
        ];

[2013-06-15 16:23:29 -0500] info [dnsadmin] -------
[2013-06-15 16:23:29 -0500] info [dnsadmin] $VAR1 = 'ARRAY(0x170cf0d8)';

この配列を手動でループしたくありません。join()関数が型の名前と16進数を返す理由を誰かが説明できますか?

4

3 に答える 3

10

やり方はuser1937198さんによく説明されていますが、なぜこのように動くのでしょうか?

それは簡単です:

$zones配列ではありません。配列参照です。

joinリストで動作します。したがって、次のようにします。

join("\n",$zones)

join基本的に、単一要素のリストを呼び出しています。そして、要素は参照であり、たまたま stringify にARRAY(0x170cf0d8).

正しく機能させるには、逆参照する必要があります。これは、実際のデータ型 (@または%、場合によっては$) を前に付けることによって行われます。

これは次のように書くことができます: @$zones、または (私を含む一部の人は、より読みやすいと言っています) as: @{ $zones }.

これは、ネストされた構造がある場合に重要です。単純な配列を変数として使用できますが、ネストされたデータ構造を扱っている場合、それは常に参照であるためです。

于 2013-06-15T21:36:47.500 に答える
6

what you want is join("\n",@{$zones}))

于 2013-06-15T21:30:40.693 に答える
5

$zonesは配列参照であり、配列値を結合するには、最初にスカラー$zonesをプレフィックスとして逆参照する必要があります@

print_log(Dumper(join("\n",@$zones)));

詳細については、参照に関する短いチュートリアルがあります: http://perldoc.perl.org/perlreftut.html#NAME

于 2013-06-15T21:35:26.023 に答える