我已经写了一个读取一些数据的Perl程序(数据是包含由下划线分开的字母数字字符的名称,如SDF_233),我使用这个数据读取
use strict; use warnings; use LWP::Simple; my $file = "names.txt"; open(DATA,$file); my @lines=<DATA>; close DATA; foreach my $line (@lines) { my $name = $line; my $otherdata; ...some more code... print $name . "," . $otherdata;}
我打印$name以便我可以用它作为参考,当我比较回原始列表时,仔细检查程序是否经历了每个名称。
问:这在Windows上工作 – 我在我的Mac上尝试同样的事情,但它不起作用。 $name没有输出,但$otherdata打印 – 这是为什么? 下划线是否与此有关?
无法使用sed或grep提取捕获组
(bash)检查IP是否在子网范围文件中
如何使用正则expression式提取URL的引号
RewriteRule ^(。*)/ $?path = $ 1 是什么意思在我的.htaccess?
expression式混合4,编辑DataTemplate后回到窗口?
如何在bash脚本中存储“time”函数输出的子string
如何使用egrep列出符合正则expression式的单词?
Sed – 删除string之前的x个字符
在linux下的c + + 11的正则expression式的奇怪的行为
你的代码肯定有你没有显示的chomp 。 如果是这样,问题是您的数据文件格式化为Windows。 具体来说,它的行以CR LF结束。 在Windows上,这将自动更改为LF,然后使用chomp删除。 在您的Mac上,该转换不会发生,因此您将CR留在后面。 你的代码输出
namer,otherdata
你的终端显示为
,otherdata
dos2unix names.txt
或改变
while (my $line = <DATA>) { chomp($line); ... }
至
while (my $line = <DATA>) { $line =~ s/s+z//; ... }
PS – 您不应该使用名为DATA的句柄。 Perl已经创建了一个名为,所以它很混乱。
PS – 使用s/[rn]+z//如果您处于奇怪的情况,您必须保留最后的空格。
像所有其他人一样,我认为你有行结束的问题。 我会诊断它的方式,如果这是我的脚本将是…
use strict; use warnings; use LWP::Simple; use Data::Dumper; # My favorite debugging tool my $file = "names.txt"; open(DATA,$file); my @lines=<DATA>; close DATA; print Dumper(@lines); foreach my $line (@lines) { my $name = chomp $line; print Dumper($name,$line); my $otherdata; #...some more code... print Dumper($otherdata); print $name . "," . $otherdata; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。