我已经写了一个读取一些数据的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; }
总结以上是内存溢出为你收集整理的为什么我在windows上运行的perl程序不能在我的mac上运行在山狮上?全部内容,希望文章能够帮你解决为什么我在windows上运行的perl程序不能在我的mac上运行在山狮上?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)