MSYS2上的Perl6脚本导致“无法统计文件”错误

Rom*_*rio 7 cross-platform perl6 rakudo-star msys2 raku

当我尝试MSYS2-64在Windows 7的(bash.exe)上运行简单的perl6脚本时,它说:

Could not open my-perl6-script.pl. Failed to stat file: no such file or directory
Run Code Online (Sandbox Code Playgroud)

相同的脚本可以很好地运行,CMD.exe因此我认为perl6和MSYS2之间有些不兼容。

$ perl6 -v 返回:

This is Rakudo Star version 2018.04.1 built on MoarVM version 2018.04.1 implementing Perl 6.c.
Run Code Online (Sandbox Code Playgroud)

perl6的bin文件夹是:

-rwxr-xr-x 1 win7 None  537938 May 11  2015 libgcc_s_sjlj-1.dll
-rw-r--r-- 1 win7 None  130262 May  7  2018 libmoar.dll.a
-rwxr-xr-x 1 win7 None   57681 May 11  2015 libwinpthread-1.dll
-rwxr-xr-x 1 win7 None 6633702 May  7  2018 moar.dll
-rwxr-xr-x 1 win7 None   57225 May  7  2018 moar.exe
-rw-r--r-- 1 win7 None     104 May  7  2018 nqp.bat
-rw-r--r-- 1 win7 None     104 May  7  2018 nqp-m.bat
lrwxrwxrwx 1 win7 None      23 Jun 19  2018 perl6 -> /c/rakudo/bin/perl6.exe
-rw-r--r-- 1 win7 None     242 May  7  2018 perl6.bat
lrwxrwxrwx 1 win7 None      23 Jun 19  2018 perl6.exe -> /c/rakudo/bin/perl6.bat
-rw-r--r-- 1 win7 None     248 May  7  2018 perl6-debug-m.bat
-rw-r--r-- 1 win7 None     242 May  7  2018 perl6-m.bat
Run Code Online (Sandbox Code Playgroud)

我是否使用perl6,perl6.exe或perl6.bat运行脚本都没有关系;它们都给出相同的错误。我想在上运行perl6脚本MSYS2-64。我该怎么办?谢谢

cxw*_*cxw 5

我为Windows安装了Rakudo,并制作了一个自定义的perl6shell脚本:

#!/bin/sh
/c/rakudo/bin/moar --execname="$0" --libpath='C:\rakudo\share\nqp\lib' --libpath='C:\rakudo\share\nqp\lib' --libpath='C:\rakudo\share/perl6/lib' --libpath='C:\rakudo\share/perl6/runtime' 'C:\rakudo\share\perl6\runtime\perl6.moarvm' "$@"
Run Code Online (Sandbox Code Playgroud)

我复制perl6.batperl6,将初始路径更改moar为MSYS样式的路径,并从更改cmdsh引用和加引号约定。

从cmd运行示例:

C:\Users\cxw>perl6 -v
This is Rakudo Star version 2019.03.1 built on MoarVM version 2019.03
implementing Perl 6.d.
Run Code Online (Sandbox Code Playgroud)

从外壳打开msys2_shell.cmd

$ uname -a
MSYS_NT-6.1-7601 Desktop 3.0.7-338.x86_64 2019-07-03 08:42 UTC x86_64 Msys
$ export PATH="$PATH":~/bin
$ cat foo.p6
use v6;
(2+2).say;
$ perl6 foo.p6
4
Run Code Online (Sandbox Code Playgroud)

对于它的价值,我的Rakudo bin目录:

$ ls -l /c/rakudo/bin
total 8033
-rwxr-xr-x 1 cxw None  930663 May 11  2017 libgcc_s_seh-1.dll
-rw-r--r-- 1 cxw None  136146 Mar 30 21:55 libmoar.dll.a
-rwxr-xr-x 1 cxw None   56978 May 11  2017 libwinpthread-1.dll
-rwxr-xr-x 1 cxw None 7021172 Mar 30 21:55 moar.dll
-rwxr-xr-x 1 cxw None   64066 Mar 30 21:55 moar.exe
-rw-r--r-- 1 cxw None     126 Mar 30 21:56 nqp.bat
-rw-r--r-- 1 cxw None     126 Mar 30 21:56 nqp-m.bat
-rw-r--r-- 1 cxw None     242 Mar 30 21:56 perl6.bat
-rw-r--r-- 1 cxw None     248 Mar 30 21:56 perl6-debug-m.bat
-rw-r--r-- 1 cxw None     242 Mar 30 21:56 perl6-m.bat
Run Code Online (Sandbox Code Playgroud)

  • 做到了。现在可以使用了。我刚刚将那个perl6 scriptlet复制到了我的bin文件夹中(不进行任何修改),并且它确实起作用了。谢谢。现在,我在Perl 6上遇到了另外2个问题,例如在从文件读取时正确处理Unicode字符(Pe​​rl 5可以正确执行)以及使用模块IO :: Glob`,这在Perl中不起作用6,但我想它可能又与MSYS2有关。我将尽快发布这些问题。谢谢。 (3认同)