首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何最好地将参数传递给Perl一行程序?

如何最好地将参数传递给Perl一行程序?
EN

Stack Overflow用户
提问于 2010-07-24 03:46:36
回答 6查看 19.4K关注 0票数 24

我有一个文件,someFile,如下所示:

$cat someFile
hdisk1 active
hdisk2 active

我使用这个shell脚本来检查:

$cat a.sh
#!/usr/bin/ksh
for d in 1 2
do
    grep -q "hdisk$d" someFile && echo "$d : ok"
done

我正在尝试将其转换为Perl:

$cat b.sh
#!/usr/bin/ksh
export d
for d in 1 2
do
    cat someFile | perl -lane 'BEGIN{$d=$ENV{'d'};} print "$d: OK" if /hdisk$d\s+/'
done

我导出外壳脚本中的变量d,并使用Perl中的%ENV获取该值。有没有更好的方法将这个值传递给Perl一行程序?

EN

回答 6

Stack Overflow用户

发布于 2014-02-11 16:50:15

对于这些一行程序来说,有时打破Perl封装层是一个很好的技巧:

for d in 1 2 ; do cat kk2 | perl -lne ' print "'"${d}"': OK" if /hdisk'"${d}"'\s+/';done
票数 5
EN

Stack Overflow用户

发布于 2010-07-24 04:03:49

在命令行上传递它,它将在@ARGV中可用

for d in 1 2
do
  perl -lne 'BEGIN {$d=shift} print "$d: OK" if /hdisk$d\s+/' $d someFile
done

请注意,此上下文中的shift操作符删除了@ARGV的第一个元素,在本例中为$d

票数 4
EN

Stack Overflow用户

发布于 2010-07-24 05:51:21

如果你在编写一行代码时遇到困难,可能对一行代码来说有点难(这只是我的观点)。我会同意@FM的建议,并用Perl完成所有的工作。读取整个文件,然后测试它:

    use strict;
    local $/ = '' ; # Read in the whole file
    my $file = <> ;

    for my $d ( 1 .. 2 )
    {
        print  "$d: OK\n" if  $file =~ /hdisk$d\s+/
    }

你可以做循环,但那会更长。当然,这在一定程度上取决于文件的大小。

请注意,到目前为止,所有的Perl示例都将为每个匹配打印一条消息--您能确保没有重复的消息吗?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3321829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档