我遇到了一個問題,我們用來決議文本檔案的 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
包含波浪號的行完全從累加器中洗掉。無論字符前面是否有任何文本,都會發生這種情況。
有沒有辦法列印將波浪號視為字串的文字部分的行?
uj5u.com熱心網友回復:
~在形式上是特殊的(參見perlform)并且沒有辦法逃避它。但是您可以為其創建一個欄位并使用波浪號填充它:
formline " \@testing2\n", '~';
uj5u.com熱心網友回復:
第一個引數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
請注意,來自資料的波浪線很好;他們就像任何其他角色一樣。
這可能更接近您的意思。創建一個圖片@*(可變寬度多行文本),并為其提供值以填充它:
while( <DATA> ) {
local $^A;
formline '@*', $_;
print $^A, "\n";
}
__DATA__
testing1
~testing2
testing3
輸出顯示具有以下內容的欄位~:
testing1
~testing2
testing3
但是,這個問題很奇怪,因為您看起來做事的方式似乎并沒有真正做格式想要做的事情。也許您有一些棘手的事情要嘗試從輸入資料中獲取圖片。但是,如果您不打算給它任何值,那么您真正格式化的是什么?考慮到您可能實際上并不想要格式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/428221.html
上一篇:子串堆疊拆分-正則運算式
