regex - 为什么我在 Windows 中运行的 Perl 程序在 Mac 上的 Mountain Lion 中无法运行?

标签 regex windows macos perl

我编写了一个读取一些数据的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 确实打印 - 这是为什么?下划线与此有关系吗?

最佳答案

你的代码肯定有一个你没有显示的chomp。如果是这样,问题在于您的数据文件是针对 Windows 进行格式化的。具体来说,其线路以 CR LF 终止。在 Windows 上,它会自动更改为 LF,稍后您可以使用 chomp 删除它。在 Mac 上,不会发生这种转换,因此您可以将 CR 留在后面。您的代码输出

name\r,otherdata

您的终端显示为

,otherdata

解决方案是修复您的输入文件

dos2unix names.txt

或更改

while (my $line = <DATA>) {
   chomp($line);
   ...
}

while (my $line = <DATA>) {
   $line =~ s/\s+\z//;
   ...
}

PS - 您不应该使用名为 DATA 的句柄。 Perl 已经创建了一个名为该名称的文件,因此很令人困惑。

PS - 如果您处于必须保留尾随空格的奇怪情况,请使用 s/[\r\n]+\z//

关于regex - 为什么我在 Windows 中运行的 Perl 程序在 Mac 上的 Mountain Lion 中无法运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12428436/

相关文章:

regex - Lua中如何从字符串中提取数字?

正则表达式*不*匹配任何字符

c++ - 使用 windowsAPI 防止其他窗口使用 "overriding"热键

xcode - 在xcode 4中禁用滑动手势

macos - 如何在 macOS 上完全卸载(重新安装)fabric8?

objective-c - 禁用 Cocoa 应用程序的子像素抗锯齿

javascript - 使用javascript的正则表达式负前瞻

r - 转换为正确的大小写,除非它是 R 中的 TLA

windows - Git 配置文件 : Best practice

php - 在 XAMPP for Windows 中升级 PHP?