打印perl结构成员

时间:2012-08-01 09:39:16

标签: perl

我有一个结构,并希望在引号

中打印出内容
#!/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'

有没有办法在引号内打印内容?

它让我的代码变得有点邋in,不得不一直打开和关闭引号。当使用``来运行使用结构体内容的命令时,这也是有问题的。

2 个答案:

答案 0 :(得分:2)

您是否考虑过Perls'Data::Dumper

  

给出一个标量或参考变量列表,写出他们的   perl语法中的内容。引用也可以是对象。该   每个变量的内容在单个Perl语句中输出。手柄   自我指涉结构正确。

答案 1 :(得分: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反引号环境中轻松使用。您还可以构建字符串$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";