Perl:如何格式化包含波浪字符“~”的字符串
Perl: how to format a string containing a tilde character "~"
我 运行 遇到一个问题,我们用来解析文本文件的 perl 脚本忽略了包含波浪号 (~) 字符的行,我不知道为什么。
下面的示例说明了我的意思:
#!/usr/bin/perl
use warnings;
formline " testing1\n";
formline " ~testing2\n";
formline " testing3\n";
my $body_text = $^A;
$^A = "";
print $body_text
这个例子的输出是:
testing1
testing3
包含波浪号的行完全从累加器中删除。无论字符前面是否有任何文本,都会发生这种情况。
有什么方法可以打印波浪号作为字符串文字部分的行吗?
~
在形式上比较特殊(见perlform),没办法转义。但是您可以为它创建一个字段并用波浪号填充它:
formline " \@testing2\n", '~';
formline
的第一个参数是“图片”(模板)。那张照片使用各种字符来表示特定的事物。 ~
表示如果字段为空则抑制输出。由于您在调用 formline
时未提供任何字段,因此您的字段为空并且输出被抑制。
my @lines = ( '', 'x y z', 'x~y~z' );
foreach $line ( @lines ) { # forms don't use lexicals, so no my on control
write;
}
format STDOUT =
~ ID: @*
$line
.
输出没有一行空白字段,因为图片中的 ~
告诉它在 $line
没有任何内容时抑制输出:
ID: x y z
ID: x~y~z
请注意,来自数据的波浪线很好;他们和其他角色一样。
这可能更接近您的意思。创建图片,@*
(variable-width 多行文本),并为其提供填充值:
while( <DATA> ) {
local $^A;
formline '@*', $_;
print $^A, "\n";
}
__DATA__
testing1
~testing2
testing3
输出显示带有 ~
的字段:
testing1
~testing2
testing3
但是,这个问题很奇怪,因为你做事的方式似乎并没有真正做格式想要做的事情。也许您在尝试从输入数据中获取图片时遇到了一些棘手的事情。但是如果你不打算给它任何值,你真正格式化的是什么?考虑到您实际上可能不需要格式。
我 运行 遇到一个问题,我们用来解析文本文件的 perl 脚本忽略了包含波浪号 (~) 字符的行,我不知道为什么。
下面的示例说明了我的意思:
#!/usr/bin/perl
use warnings;
formline " testing1\n";
formline " ~testing2\n";
formline " testing3\n";
my $body_text = $^A;
$^A = "";
print $body_text
这个例子的输出是:
testing1
testing3
包含波浪号的行完全从累加器中删除。无论字符前面是否有任何文本,都会发生这种情况。
有什么方法可以打印波浪号作为字符串文字部分的行吗?
~
在形式上比较特殊(见perlform),没办法转义。但是您可以为它创建一个字段并用波浪号填充它:
formline " \@testing2\n", '~';
formline
的第一个参数是“图片”(模板)。那张照片使用各种字符来表示特定的事物。 ~
表示如果字段为空则抑制输出。由于您在调用 formline
时未提供任何字段,因此您的字段为空并且输出被抑制。
my @lines = ( '', 'x y z', 'x~y~z' );
foreach $line ( @lines ) { # forms don't use lexicals, so no my on control
write;
}
format STDOUT =
~ ID: @*
$line
.
输出没有一行空白字段,因为图片中的 ~
告诉它在 $line
没有任何内容时抑制输出:
ID: x y z
ID: x~y~z
请注意,来自数据的波浪线很好;他们和其他角色一样。
这可能更接近您的意思。创建图片,@*
(variable-width 多行文本),并为其提供填充值:
while( <DATA> ) {
local $^A;
formline '@*', $_;
print $^A, "\n";
}
__DATA__
testing1
~testing2
testing3
输出显示带有 ~
的字段:
testing1
~testing2
testing3
但是,这个问题很奇怪,因为你做事的方式似乎并没有真正做格式想要做的事情。也许您在尝试从输入数据中获取图片时遇到了一些棘手的事情。但是如果你不打算给它任何值,你真正格式化的是什么?考虑到您实际上可能不需要格式。