0

構造体があり、引用符内の内容を出力したい

#!/usr/bin/perl

use Class::Struct;

struct( astruct => [ test => '$']);

my $blah = new astruct;
$blah->test("asdf");

print "prints array reference: '$blah->test'\n";
print "prints content: '", $blah->test, "'\n";

出力は

prints array reference: 'astruct=ARRAY(0x20033af0)->test'
prints content: 'asdf'

引用符内の内容を印刷する方法はありますか?

そのため、常に引用符を開いたり閉じたりする必要があるため、コードが少しだらしなくなります。`` を使用して構造体の内容を使用するコマンドを実行する場合にも問題があります。

4

2 に答える 2

2

PerlのData:: Dumperを検討しましたか?

スカラーまたは参照変数のリストを指定して、それらの内容をperl構文で書き出します。参照はオブジェクトにすることもできます。各変数の内容は、単一のPerlステートメントで出力されます。自己参照構造を正しく処理します。

于 2012-08-01T09:41:43.847 に答える
2

変数$blahは配列参照を保持し、逆参照される前に文字列に挿入されます。これを変更するには、逆参照を文字列の外側に配置します。

print "prints no array reference any more: '".($blah->test)."'\n";
# parenthesis was optional

または匿名配列でちょっとしたトリックを引き出します:

print "prints no array reference any more: '@{[$blah->test]}'\n";

メソッドの戻り値から構築@{...}する無名配列 ( )を逆参照 ( ) します。(私たちのあなたの構造体フィールドは何でも。)[...]test

qxこれらの方法はどちらも文字列を作成するときに機能しますが、2 番目の形式はまたはバッククォート環境で簡単に使用できます。文字列$commandを作成し、それを で実行することもできqx($command)ます。

の追加機能が必要ない場合は、Class::Structいつでもハッシュを使用して手間を省くことができます。

%blah = (test => 'asdf');
print "prints my value: '$blah{test}'\n";

また

$blah = {test => 'asdf'};
print "prints my value: '$blah->{test}'\n";
于 2012-08-01T11:12:33.933 に答える