为什么不';当我在Perl中使用_数据时,我不会得到输出吗?

为什么不';当我在Perl中使用_数据时,我不会得到输出吗?,perl,macos-catalina,Perl,Macos Catalina,有人知道macOS Catalina上的Perl\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu数据语法是否不受欢迎吗?我运行的是PerlV5.18.4,即使是这样一个简单的程序也不会给出任何输出(也不会出错) 使用严格; 使用警告; while(){ 打印美元; } __资料__ 第1行 第2行 第3行 编辑: 这很奇怪。我之前说过我有两个Mac系统,都有相同的问题。不完全正确,在一个系统上程序工作,在另一个系统上相同的程序不工

有人知道macOS Catalina上的Perl
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu数据
语法是否不受欢迎吗?我运行的是PerlV5.18.4,即使是这样一个简单的程序也不会给出任何输出(也不会出错)

使用严格;
使用警告;
while(){
打印美元;
}
__资料__
第1行
第2行
第3行
编辑: 这很奇怪。我之前说过我有两个Mac系统,都有相同的问题。不完全正确,在一个系统上程序工作,在另一个系统上相同的程序不工作

两个系统上的hextump相同:

Mac Mini:

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
Mac-mini-van-Theo:Programming theo$ more test.pl
use strict;^Muse warnings;^Mwhile(<DATA>) {^M    print $_;^M}^M__DATA__^Mline1^Mline2^Mline3
macmini-vantheo:Programming Theo$hextump-C test.pl
00000000 75 73 65 20 73 74 72 69 63 74 3b 0d 75 73 65 20 |严格使用;。使用|
00000010 77 61 72 6e 69 6e 67 73 3b 0d 77 68 69 6c 65 28 |警告;。当(|
000000 20 3c 44 41 54 41 3e 29 20 7b 0d 20 20 70 72 |{.pr|
000000 30 69 6e 74 20 24 5f 3b 0d 7d 0d 5f 44 54 41 | int$| | u数据|
000000 40 5f 5f 0d 6c 69 6e 65 31 0d 6c 69 6e 65 32 0d 6c | | | | 2.l|
00000050696E65330D | ine3|
00000055
iMac:

Theo@iMac-van Theo编程%hextump-C test.pl
00000000 75 73 65 20 73 72 69 63 74 3b 0a 75 73 65 20 |严格使用;。使用|
00000010 77 61 72 6e 69 6e 67 73 3b 0a 77 68 69 6c 65 28 |警告;。当(|
00000020 3c 44 41 54 41 3e 29 7b 0a 20 20 70 72 69 |)|
00000030 6e 74 20 24 5f 3b 0a 7d 0a 5f 44 54 41新台币数据|
00000040 5f 5f 0a 6c 69 6e 65 31 0a 6c 69 6e 65 32 0a 6c线1.线2.线|
00000050696E65330A | ine3|
00000055
但是,“猫”或“更多”表示不同:

Mac Mini:

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
Mac-mini-van-Theo:Programming theo$ more test.pl
use strict;^Muse warnings;^Mwhile(<DATA>) {^M    print $_;^M}^M__DATA__^Mline1^Mline2^Mline3
Mac mini van Theo:Programming Theo$more test.pl 严格使用^缪斯警告^Mwhile(){^M print$\u;^ M}^M\uuuu数据\uuuu ^ Mline1^Mline2^Mline3 iMac:

Theo@iMac-van Theo编程多%test.pl
严格使用;
使用警告;
while(){
打印美元;
}
__资料__
第1行
第2行
第3行

区别是什么?macmini使用“bash”作为shell(程序失败时),iMac使用“zsh”。因此,这个问题实际上与perl无关,而是与perl/shell有关。对于Catalina,Zsh被用作默认shell,但是旧的Bash shell仍然包含在macOS中,您仍然可以切换到它。这似乎与shell如何处理行尾有关,尽管我不明白为什么会发生这种情况,以及如何解决它。

\uuuuu DATA\uuuuu
很好,它没有平台特定的问题(您可以用它做很多事情)

但是,如果您想知道任何特定Perl事物的状态,这里有文档。有时也很方便

你是如何运行你的程序的


提供程序的hextump:
hextump-C program.pl
。可能有一些有趣的角色。

\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

但是,如果您想知道任何特定Perl事物的状态,这里有文档。有时也很方便

你是如何运行你的程序的


提供程序的hextump:
hextump-C program.pl
。可能有一些有趣的字符。

至少在我的环境(macOS Big Sur,perl v5.28.3)中,您的代码是正常的,没有问题。检查行尾?尝试在读取数据之前和之后打印一些输出,看看问题是否出在数据句柄上。这看起来确实像是行尾问题。我在mac上使用bash,没有这个问题。请再次检查您的hexdump-在一种情况下,eol是0d(13),在另一种情况下是0a(10)。至少在我的环境中(macOS Big Sur,perl v5.28.3),您的代码是正常的,没有问题。检查您的行结尾?在读取数据之前和之后尝试打印一些输出,看看这是否只是数据句柄的问题。这看起来确实像是一个行尾问题。我在mac上使用bash,没有这个问题。请再次检查您的hexdump-在一种情况下,eol为0d(13),在另一种情况下为0a(10)。非阻塞独占群集数据以确保单个脚本实例(只需阅读技巧文章)。行尾可以。数据前后没有空格或CR。我通过终端运行测试程序。我有两个Mac系统,都运行带有PerlV5.18.4的Catalina。他们都有同样的问题。其他perl程序运行正常,这只是数据的问题,我不知道问题出在哪里。请用任何澄清更新您的问题请参阅上面的编辑…非阻塞独占群集数据以确保单个脚本实例(请阅读文章)。行结束是可以的。数据前后没有空格或CR。我通过终端运行测试程序。我有两个Mac系统,都运行带有PerlV5.18.4的Catalina。他们都有同样的问题。其他perl程序运行正常,这只是数据的问题,我不知道问题是什么。请用任何澄清更新您的问题请参阅上面的编辑。。。
Theo@iMac-van-Theo Programming % more test.pl 
use strict;
use warnings;
while(<DATA>){
    print $_;
}

__DATA__
line1
line2
line3