web-dev-qa-db-ja.com

PearlのPHPprint_r()に相当するものは何ですか?

PHPのprint_rは非常に便利ですが、Perlにリモートで同等のものがあるかどうか疑問に思いますか?

26
Steve M

@tchristは Data :: Dump over Data :: Dumper を推奨していることに注意してください。私はそれを知りませんでしたが、見た目からすると、はるかに使いやすく、見栄えが良く、結果を解釈しやすいようです。

データ::ダンパー

上記のリンクに示されている例のスニペット。

use Data::Dumper;

package Foo;
sub new {bless {'a' => 1, 'b' => sub { return "foo" }}, $_[0]};

package Fuz;                       # a weird REF-REF-SCALAR object
sub new {bless \($_ = \ 'fu\'z'), $_[0]};

package main;
$foo = Foo->new;
$fuz = Fuz->new;
$boo = [ 1, [], "abcd", \*foo,
         {1 => 'a', 023 => 'b', 0x45 => 'c'}, 
         \\"p\q\'r", $foo, $fuz];

########
# simple usage
########

$bar = eval(Dumper($boo));
print($@) if $@;
print Dumper($boo), Dumper($bar);  # pretty print (no array indices)

$Data::Dumper::Terse = 1;          # don't output names where feasible
$Data::Dumper::Indent = 0;         # turn off all pretty print
print Dumper($boo), "\n";

$Data::Dumper::Indent = 1;         # mild pretty print
print Dumper($boo);

$Data::Dumper::Indent = 3;         # pretty print with array indices
print Dumper($boo);

$Data::Dumper::Useqq = 1;          # print strings in double quotes
print Dumper($boo);
43
Vinko Vrsalovic

通常のPerlと同様に、由緒あるData :: Dumper:に代わるソリューションをお勧めします。

  • Data :: Dump :: Streamer Data :: Dumperよりも簡潔な出力があり、Data :: Dumperよりも優れたデータをシリアル化することもできます。
  • [〜#〜] yaml [〜#〜] (または Yaml :: Syck 、または他のYAMLモジュール)は、非常に読みやすいYAMLでデータを生成します。

そしてもちろん、デバッガーでは、「x」コマンドを使用して任意の変数を表示できます。私は特に「x 2 $complex_structure」という形式が好きです。ここで、2(または任意の数)は、2レベルのネストされたデータのみを表示するようにデバッガーに指示します。

8
mirod

Data :: Dumper の代わりに、有効なPerlコードを生成せず、代わりに、よりスキミング可能な形式(のxコマンドと同じ) Perlデバッガー)は Dumpvalue です。また、消費するメモリも大幅に少なくなります。

同様に、 Data :: Dump :: Streamer があり、これは よりもさまざまなエッジおよびコーナーの場合でより正確です。 )Data :: Dumper はです。

6

Data :: Dump を使用します。出力はData :: Dumper($ VAR1なし)よりも少しクリーンで、クイックショートカットを提供し、DTRTも試行します。つまり、呼び出されるとSTDERRに出力されます。 voidコンテキストで、そうでない場合はダンプ文字列を返します。

2
kixx

私は同じものを探しに行って、 この素敵な小さなPerl関数 を見つけました。これは明示的にprint_r()のような結果を生成することを意図しています。

スクリプトの作成者は、フォーラムで正確な質問をしていました ここ

print objectToString($json_data);

この出力を提供します:

HASH {
time                             => 1233173875
error                            => 0
node                             => HASH {
    vid                              => 1011
    moderate                         => 0
    field_datestring                 => ARRAY {
        HASH {
            value                            => August 30, 1979
        }
    }

    field_tagged_persons             => ARRAY {
        HASH {
            nid                              => undef
        }
    }

...and so on...
2
Stan James