为什么没有$ARGV [0]由​​文件名初始化我通过这个perl一个班轮?

前端之家收集整理的这篇文章主要介绍了为什么没有$ARGV [0]由​​文件名初始化我通过这个perl一个班轮?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个perl一个线程,应该将xml文件中的每个单独的行导出到它自己的单独的文件,其中包含原始文件名称,然后是该文件所在的行号.

例如,如果xml文件被称为“foo.xml”,它有100行,那么我想要有一个名为“foo_1.xml”,“foo_2.xml”,“foo_3.xml”等的一百个文件.

我认为我传给一个班轮的文件名称可以通过ARGV获得,但不是.当我运行这个时,我收到$ARGV [0]中的“未初始化的值”:

perl -nwe 'open (my $FH,">","$ARGV[0]_$.\.xml"); print $FH $_;close $FH;' foo.xml

我俯瞰什么?

解决方法

当使用魔术 <>文件句柄(您使用-n选项进行隐式处理)时,Perl会将文件名从 @ARGV开始移开. (这是在 perlop中提到的).您需要使用包含当前正在读取的文件名的plain标量 $ARGV
perl -nwe 'open (my $FH,"${ARGV}_$.\.xml"); print $FH $_;close $FH;' foo.xml

(大括号是必需的,因为$ARGV_是变量的合法名称.)

原文链接:https://www.f2er.com/Perl/171619.html

猜你在找的Perl相关文章