如果我使用perl -F
運行一個腳本,是的東西值保存在腳本可以找到它的Perl環境中的任何地方?我想編寫一個腳本,默認情況下,將輸入分隔符(如果它是一個字符串而不是正則表達式)重用爲輸出分隔符。獲取autosplit分隔符的值?
5
A
回答
4
看着source,我不認爲分隔符保存在任何地方。當您運行
perl -F, -an
詞法分析器實際生成的代碼
LINE: while (<>) {our @F=split(q\0,\0);
,並對其進行解析。此時,關於分隔符的任何信息都將丟失。
你最好的選擇是split
手:
perl -ne'BEGIN { $F="," } @F=split(/$F/); print join($F, @F)' foo.csv
或分隔符作爲參數傳遞給你的腳本:
或分隔符傳遞作爲環境變量:
export F=,; perl -F$F -ane'print join($ENV{F}, @F)' foo.csv
0
由於@ThisSuitIsBlackNot說它看起來像分隔符保存在任何地方。
這是怎麼perl.c存儲-F
參數
case 'F':
PL_minus_a = TRUE;
PL_minus_F = TRUE;
PL_minus_n = TRUE;
PL_splitstr = ++s;
while (*s && !isSPACE(*s)) ++s;
PL_splitstr = savepvn(PL_splitstr, s - PL_splitstr);
return s;
然後詞法分析器生成的代碼
LINE: while (<>) {our @F=split(q\0,\0);
但是這當然是編的,如果你去運行它::貶低你可以看到存儲的內容。
$ perl -MO=Deparse -F/e/ -e ''
LINE: while (defined($_ = <ARGV>)) {
our(@F) = split(/e/, $_, 0);
}
-e syntax OK
作爲perl,總是有一種方式,但是很醜。 (這是一些我寫的,而最醜陋的代碼):
use B::Deparse;
use Capture::Tiny qw/capture_stdout/;
BEGIN {
my $f_var;
}
unless ($f_var) {
$stdout = capture_stdout {
my $sub = B::Deparse::compile();
&{$sub}; # Have to capture stdout, since I won't bother to setup compile to return the text, instead of printing
};
my (undef, $split_line, undef) = split(/\n/, $stdout, 3);
($f_var) = $split_line =~ /our\(\@F\) = split\((.*)\, \$\_\, 0\);/;
print $f_var,"\n";
}
輸出:
$ perl -Fe/\\\(\\[\\\<\\{\"e testy.pl
m#e/\(\[\<\{"e#
你可以可以遍歷字節碼代替,因爲一開始可能每次都將是相同的直到你達到模式。
+0
那麼,這是令人印象深刻的,但對我的應用程序有點過度。我只是做非自動分裂。 –
相關問題
- 1. LINQ獲取分隔符分隔的字段值
- 2. 獲取IFile的行分隔符
- 3. 當分隔符存在時獲取字符串值vb.net
- 4. 如何使用從字符串獲取值「 - 」分隔符在SQL
- 5. 使用字符串分隔符從列中獲取值
- 6. 獲取以逗號分隔字符串從鍵值對值
- 7. 獲取替換逗號分隔符的列的值
- 8. 用java中的兩個分隔符獲取值
- 9. 如何在數組中獲取逗號分隔符(,)的值?
- 10. 獲取的名稱作爲逗號分隔值字符串
- 11. 用分隔符獲取文本框的值
- 12. 獲取所有的逗號分隔字符串值在Javascript
- 13. 獲取逗號分隔字符串的第一個值
- 14. 如何獲取逗號分隔字符串的值到表中?
- 15. preg_split在數組中獲取分隔符
- 16. 如何從StringTokenizer獲取分隔符?
- 17. 從行中獲取分隔符
- 18. 獲取從使preg_split分隔符在PHP
- 19. 在Fortran中獲取文件分隔符
- 20. 解析分隔符分隔值
- 21. 如何按分隔符分隔值?
- 22. 處理分隔符分隔值
- 23. 獲取輸入值並用「|」分隔
- 24. 獲取字符串的一部分分隔符後
- 25. 列中的逗號分隔值(ID)。如何獲取逗號分隔字符串中每個值的說明。
- 26. 從製表符分隔文件中獲取值
- 27. 拆分字符串以獲取單詞分隔符
- 28. 從長字符串獲取分隔符以分割
- 29. XPath分隔符/分隔符
- 30. 在「Access 2013報告」中以分號分隔的字符串值獲取一列
這就是我所害怕的。謝謝。 –
順便說一下,'perl -F,-an'在技術上是多餘的; '-F'本身意味着'-a'和'-n'(你可以通過手動指定'-p'來覆蓋)。可能更清楚地包括它們,儘管當你寫一行代碼而不是要保存的腳本時,清晰度通常不是優先事項。 :) –