有人知道__DATA__macOS Catalina 上的 Perl语法是否已被弃用吗?我运行了 perl v5.18.4,即使是这样的简单程序也没有输出(也没有错误);
use strict;
use warnings;
while(<DATA>){
print $_;
}
__DATA__
line1
line2
line3
Run Code Online (Sandbox Code Playgroud)
编辑:这很奇怪。我之前说过我有 2 个 Mac 系统,它们都有同样的问题。不太正确,在一个系统上该程序可以工作,而在另一个系统上相同的程序却没有。
两个系统上的 Hexdump 是相同的:
麦克迷你:
Mac-mini-van-Theo:Programming theo$ hexdump -C test.pl
00000000 75 73 65 20 73 74 72 69 63 74 3b 0d 75 73 65 20 |use strict;.use |
00000010 77 61 72 6e 69 6e 67 73 3b 0d 77 68 69 6c 65 28 |warnings;.while(|
00000020 3c 44 41 54 41 3e 29 20 7b 0d 20 20 20 20 70 72 |<DATA>) {. pr|
00000030 69 6e 74 20 24 5f 3b 0d 7d 0d 5f 5f 44 41 54 41 |int $_;.}.__DATA|
00000040 5f 5f 0d 6c 69 6e 65 31 0d 6c 69 6e 65 32 0d 6c |__.line1.line2.l|
00000050 69 6e 65 33 0d |ine3.|
00000055
Run Code Online (Sandbox Code Playgroud)
iMac:
Theo@iMac-van-Theo Programming % hexdump -C test.pl
00000000 75 73 65 20 73 74 72 69 63 74 3b 0a 75 73 65 20 |use strict;.use |
00000010 77 61 72 6e 69 6e 67 73 3b 0a 77 68 69 6c 65 28 |warnings;.while(|
00000020 3c 44 41 54 41 3e 29 7b 0a 20 20 20 20 70 72 69 |<DATA>){. pri|
00000030 6e 74 20 24 5f 3b 0a 7d 0a 0a 5f 5f 44 41 54 41 |nt $_;.}..__DATA|
00000040 5f 5f 0a 6c 69 6e 65 31 0a 6c 69 6e 65 32 0a 6c |__.line1.line2.l|
00000050 69 6e 65 33 0a |ine3.|
00000055
Run Code Online (Sandbox Code Playgroud)
但是,“猫”或“更多”显示差异:
麦克迷你:
Mac-mini-van-Theo:Programming theo$ more test.pl
use strict;^Muse warnings;^Mwhile(<DATA>) {^M print $_;^M}^M__DATA__^Mline1^Mline2^Mline3
Run Code Online (Sandbox Code Playgroud)
iMac:
Theo@iMac-van-Theo Programming % more test.pl
use strict;
use warnings;
while(<DATA>){
print $_;
}
__DATA__
line1
line2
line3
Run Code Online (Sandbox Code Playgroud)
区别?Mac Mini 使用“bash”作为 shell(程序失败的地方),iMac 使用“zsh”。所以问题不是真的与 perl 相关,而是与 perl/shell 相关。在 Catalina 中,Zsh 用作默认 shell,但旧的 Bash shell 仍然包含在 macOS 中,您仍然可以切换到它。这似乎与外壳如何处理行尾有关,尽管我不明白为什么会发生这种情况以及如何解决它。
__DATA__很好,并且没有特定于平台的问题(并且您可以用它做很多愚蠢的技巧)。
但是,如果您想了解任何特定 Perl 事物的状态,请参阅perldeprecation文档。有时perlexperiment也很方便。
你是如何运行你的程序的?
提供程序的十六进制转储:hexdump -C program.pl. 也许有有趣的角色。