Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ExtUtils::MakeMaker PERL_MM_OPT在空格上拆分解决方案_Perl - Fatal编程技术网

ExtUtils::MakeMaker PERL_MM_OPT在空格上拆分解决方案

ExtUtils::MakeMaker PERL_MM_OPT在空格上拆分解决方案,perl,Perl,MakeMaker将PERL_-MM_-OPT拆分为空白,这意味着类似以下内容将无法工作 export PERL_MM_OPT='LIBS="-L/usr/sfw/lib -lssl -lcrypto" INC=/usr/sfw/include' 是否有一个已知的解决方法,或者在这个场景中我必须避免使用PERL_-MM_-OPT --更新-- Moblule提出了使用制表符而不是空格的极好建议。mobrule只在空格上拆分是正确的。但是,该解决方案不起作用,因为它看起来像是将选项卡转换为环境变

MakeMaker将PERL_-MM_-OPT拆分为空白,这意味着类似以下内容将无法工作

export PERL_MM_OPT='LIBS="-L/usr/sfw/lib -lssl -lcrypto" INC=/usr/sfw/include'
是否有一个已知的解决方法,或者在这个场景中我必须避免使用PERL_-MM_-OPT

--更新--

Moblule提出了使用制表符而不是空格的极好建议。mobrule只在空格上拆分是正确的。但是,该解决方案不起作用,因为它看起来像是将选项卡转换为环境变量中的空格

> cat tmp.sh 
export PERL_MM_OPT='LIBS="-L/usr/sfw/lib        -lssl   -lcrypto" INC=-I/usr/sfw/include'
echo $PERL_MM_OPT | perl -pe 's/\t/[t]/g' | perl -pe 's/ /[s]/g'

> head -1 tmp.sh | perl -pe 's/\t/[t]/g' | perl -pe 's/ /[s]/g'
export[s]PERL_MM_OPT='LIBS="-L/usr/sfw/lib[t]-lssl[t]-lcrypto"[s]INC=-I/usr/sfw/include'

> bash tmp.sh 
LIBS="-L/usr/sfw/lib[s]-lssl[s]-lcrypto"[s]INC=-I/usr/sfw/include
--更新2--

因此,tab建议起了作用(我被echo的行为误导了,并得出了错误的结论,解释了它失败的原因),但它并没有解决问题

现在的问题是ExtUtils/Liblist/Kid.pm不需要一个前导的双引号(同样的结果也发生在单引号中)


因此,这个问题的解决方案(如果存在的话)似乎不能依赖于引号。

实际上,
MakeMaker.pm
在空格上拆分,而不是在所有空格上拆分。你能用标签吗

export PERL_MM_OPT='LIBS=“-L/usr/sfw/libTab lsslTab lcrypto”INC=/usr/sfw/include


我认为您使用选项卡设置环境变量的方式是可以的——正是
echo
命令将选项卡转换为空格:

$ VAR='abc^Idef'
$ echo $VAR | od -c
0000000   a   b   c       d   e   f  \n
0000010
看起来好像没用。但是等等:

$ export VAR
$ perl -e 'print $ENV{VAR}' | od -c
0000000   a   b   c  \t   d   e   f
0000007
根据
$ENV{PERL_MM_OPT}
中的参数如何传递到子流程(通过
系统
执行
打开
等),这在
ExtUtils::MakeMaker
中可能仍然有效,也可能无效:

系统调用1将起作用,因为当
system
调用有一个带有任何元字符的arg时,它会将命令传递给shell。shell将正确解析参数


系统调用2失败,因为multi-arg
system
总是绕过shell,并且
gcc
一直在寻找一个名称不太可能是“libssl^I-lcrypto^I-L/usf/sfw/lib.a”的库。如果
ExtUtils::MakeMaker
正在使用此调用样式来运行编译器,那么此解决方案将无法完成此任务。

实际上,
MakeMaker.pm
在空格上拆分,但不在所有空格上拆分。你能用标签吗

export PERL_MM_OPT='LIBS=“-L/usr/sfw/libTab lsslTab lcrypto”INC=/usr/sfw/include


我认为您使用选项卡设置环境变量的方式是可以的——正是
echo
命令将选项卡转换为空格:

$ VAR='abc^Idef'
$ echo $VAR | od -c
0000000   a   b   c       d   e   f  \n
0000010
看起来好像没用。但是等等:

$ export VAR
$ perl -e 'print $ENV{VAR}' | od -c
0000000   a   b   c  \t   d   e   f
0000007
根据
$ENV{PERL_MM_OPT}
中的参数如何传递到子流程(通过
系统
执行
打开
等),这在
ExtUtils::MakeMaker
中可能仍然有效,也可能无效:

系统调用1将起作用,因为当
system
调用有一个带有任何元字符的arg时,它会将命令传递给shell。shell将正确解析参数


系统调用2失败,因为multi-arg
system
总是绕过shell,并且
gcc
一直在寻找一个名称不太可能是“libssl^I-lcrypto^I-L/usf/sfw/lib.a”的库。如果
ExtUtils::MakeMaker
正在使用此调用样式来运行编译器,那么此解决方案将无法完成此任务。

Bummer。现在这已经成为一个bash/shell问题。我希望这个问题的唯一解决方案是在EU::MM中添加更好的ARGV处理。我只晚了一年,但是因为它是在空格上而不是在制表符上拆分的,你能省去双引号吗?糟糕。现在,这已经成为一个bash/shell问题。我希望这个问题的唯一解决方案是在EU::MM中添加更好的ARGV处理。我只晚了一年,但由于它是在空格上而不是在制表符上拆分的,您能省去双引号吗?>是echo命令将制表符转换为空格。您是对的。tab建议确实有效,我对它失败的原因得出了错误的结论。现在的问题是ExtUtils/Liblist/Kid.pm不需要一个前导引号。忽略了LIBS中无法识别的参数:“-L/usr/sfw/lib”因此,似乎这个问题的解决方案(如果存在的话)不能依赖引号或空格。>是echo命令将制表符转换为空格。你是对的。制表符建议确实有效,我得出了错误的结论,解释了失败的原因。现在的问题是ExtUtils/Liblist/Kid.pm不需要前导引号。LIBS中未识别的参数被忽略:“-L/usr/sfw/lib”所以,似乎这个问题的解决方案(如果有的话)不能依赖于引号或空格。