如果我使用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. 如何使用從字符串獲取值「 - 」分隔符在SQL
- 4. 獲取替換逗號分隔符的列的值
- 5. 用java中的兩個分隔符獲取值
- 6. 獲取的名稱作爲逗號分隔值字符串
- 7. 用分隔符獲取文本框的值
- 8. 如何在數組中獲取逗號分隔符(,)的值?
- 9. 獲取所有的逗號分隔字符串值在Javascript
- 10. 解析分隔符分隔值
- 11. 如何按分隔符分隔值?
- 12. 在Fortran中獲取文件分隔符
- 13. XPath分隔符/分隔符
- 14. 獲取2列的值作爲以'|'分隔的單個值
- 15. 級聯 - 如何讀取分隔符分隔文件並獲取特定字段值
- 16. 獲取當前系統設置的分數分隔符
- 17. 如何在分區間隔中獲取值所屬的分區?
- 18. 讀取存儲在csv文件中的rgb值,用逗號分隔符分隔
- 19. 獲取分隔符前的第一個字符串?
- 20. 獲取基於位置和分隔符的unix子字符串
- 21. C++正則表達式。獲取帶分隔符的字符串
- 22. 如何獲取字符分隔的子字符串?
- 23. 獲取間隔百分比
- 24. pandas:在分隔符上拆分一列,並獲得唯一值
- 25. 如何格式化不以分隔符分隔的值文件?
- 26. 如何從JavaScript中的逗號分隔的字符串中獲取每個值?
- 27. 逗號分隔值分隔
- 28. 獲取Mysql數據並分割爲分隔符
- 29. 如何使用分號分隔符從MariaDB獲取數據
- 30. 拆分逗號分隔字符串/值
這就是我所害怕的。謝謝。 –
順便說一下,'perl -F,-an'在技術上是多餘的; '-F'本身意味着'-a'和'-n'(你可以通過手動指定'-p'來覆蓋)。可能更清楚地包括它們,儘管當你寫一行代碼而不是要保存的腳本時,清晰度通常不是優先事項。 :) –