我有一个结构,并希望在引号
中打印出内容#!/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,不得不一直打开和关闭引号。当使用``来运行使用结构体内容的命令时,这也是有问题的。
答案 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";