2013-03-18 76 views
5

我解析一些数据并组织它,现在我需要捕获它在一个变量内。Perl附加printf输出到字符串

在此之前,我从未使用过printf或sprintf。

我用printf在这样的方式来组织数据:

printf("%-30s %18s %18s\n", "$a", "$b", "$c\n"); 

现在我的影片存储一个字符串变量,我想将组织的数据追加到变量$ result。

我想是这样

$result.printf("%-30s %18s %18s\n", "$a", "$b", "$c\n"); 

,它不工作。我也试过sprintf。

任何想法?

感谢,S

+6

我想我讲在这里给大家当我说“不工作“是有史以来第三次有用的诊断信息。告诉我们你预期会发生什么,并告诉我们究竟发生了什么。 – mob 2013-03-18 22:28:12

+2

@mob我很好奇:什么是前两个最不有帮助的? – TLP 2013-03-18 22:29:50

+1

请人们停止用引号包装单独的变量吗?你会用C还是Python来做?你为什么用Perl做呢?我们称之为“无用的可变插值”。另外,你在你的格式字符串和printf的最后一个参数中都有\ n。你真的想在你的输出中使用两个换行符吗? – runrig 2013-03-19 00:06:14

回答

1

不知道你是什么意思“试图sprintf的太”,因为没有任何理由,如果你这样做的权利这是行不通的。尽管你展示的语法看起来不像perl,更像是python或ruby?

my $foo = sprintf("%-30s %18s %18s\n", "$a", "$b", "$c\n"); 
$result .= $foo; 
+0

我投了'python' =)打赌。 – 2013-03-18 22:42:58

+0

感谢您的帮助。是的,对于“不起作用”中缺乏特异性而感到抱歉。我应该更具体。它可以工作,或者我可以通过将变量附加到变量中,将sprintf格式保存到变量中,以附加到.txt文件,并将sprintf语句附加到像我正在尝试执行的变量。 – user1610717 2013-03-18 23:15:23

+1

@ user1610717'$ foo'只是一个转换变量,你可以很容易地追加'sprintf'。 – TLP 2013-03-18 23:47:52

8
printf

输出构造字符串指定的句柄(或者如果省略当前缺省),并返回一个布尔值指示是否发生了IO错误或没有。没有用。 sprintf返回构造的字符串,所以你需要这个。

连接两个字符串(附加一个到另一个),一个采用.运营商(或join

$result . sprintf(...) 

但你说这是行不通的。据推测,这是因为你也想存储在$result产生的字符串,你可以做使用

$result = $result . sprintf(...); 

或短

$result .= sprintf(...);