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

你考虑过 Perls 的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方法的返回值构造它。(我们的结构字段,无论如何。)

虽然这两种方法在构造字符串时都有效,但第二种形式可以很容易地用于 a qxor backticks环境。您还可以构建一个字符串$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 回答