热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Bash中的Perl:如何从管道中读取并同时将参数传递给perl?

如何解决《Bash中的Perl:如何从管道中读取并同时将参数传递给perl?》经验,为你挑选了1个好方法。

以下是我正在尝试的代码:

echo "a b c" | perl -e 'print $ARGV[0]; print $ARGV[1]; print $_;' "abc" "def"

此代码的输出是:

abcdef

我无法弄清楚为什么"打印$ _;" 不像往常一样打印"ab c".有任何想法吗?



1> TLP..:

您没有使用-n-p,因此您不使用<>标准输入.如果你有参数,你不会做任何事情.

说明:

当你使用-n或时-p,它会while(<>)在你的代码周围放置一个循环,如下所示:

perl -ne ' print ' 

等于

perl -e ' while (<>) { print }'

如果您使用-p它是:

perl -e ' while (<>) { print } continue { print $_ }'

在这个阶段,Perl将<>通过检查@ARGV存储脚本参数的位置来决定如何工作.如果其中有任何内容,它会将参数视为文件名,并尝试打开并读取这些文件.然后将调用文件句柄ARGV.此时,<>不能用于从标准输入读取.

换句话说,使用参数将覆盖读数STDIN.因此,如果您想从标准输入读取,则使用该文件句柄:

echo "a b c" | perl -e ' print @ARGV[0,1]; while () { print } ' foo bar

另一个选择是@ARGV预先清除数组,如下所示:

echo "a b c"|perl -ne'BEGIN { @x = @ARGV; @ARGV = () }; print @x; print;' foo bar

但是,@x每次输入的输入也会打印一次,这可能是不可取的.


推荐阅读
author-avatar
数字货币交易所贺顾问
Vxin:QKL17999
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有