有没有更好的方法使用Perl实现这一点?

有没有更好的方法使用Perl实现这一点?,perl,environment-variables,Perl,Environment Variables,我正在编写一个Perl脚本,它可以实现以下功能: 读取循环中环境变量a到z的值 根据环境变量的值,生成一个结果文件,类似于 a - 1,2,3,4 b - a,b,c c - $234.34,$123.12 keyword1 %a% keyword2 %b% keyword3 %c% 需要注意的一点是,所有的声明都必须在用法之前 问题是,例如,我读取了a,并生成了这个结果文件 a - 1,2,3,4 keyword3 %c% 现在,当我阅读b时,我需要结果文件如下所示 a - 1,2,3,4

我正在编写一个Perl脚本,它可以实现以下功能:

  • 读取循环中环境变量
    a
    z
    的值
  • 根据环境变量的值,生成一个结果文件,类似于

    a - 1,2,3,4
    b - a,b,c
    c - $234.34,$123.12
    keyword1 %a%
    keyword2 %b%
    keyword3 %c%
    
    需要注意的一点是,所有的声明都必须在用法之前

  • 问题是,例如,我读取了
    a
    ,并生成了这个结果文件

    a - 1,2,3,4
    keyword3 %c%
    
    现在,当我阅读
    b
    时,我需要结果文件如下所示

    a - 1,2,3,4
    b - a,b,c
    keyword1 %a%
    keyword2 %b%
    
  • 我应该如何使用Perl实现这一点

    我可以想到的一种方法是生成两个不同的文件,一个使用声明,另一个使用用法,然后在脚本执行结束时连接文件


    有更好的方法吗?

    不需要单独的文件。将声明和用法累积到两个不同的数组变量中,
    @declarations
    @usages
    。读取所有环境变量并确定两个数组的内容后,打印它们:

    say for @declarations;
    say for @usages;
    

    您甚至可以省略第一个数组。一旦你弄清楚一个声明应该是什么,立即打印出来。您只需累积使用,直到知道不再有声明。

    不需要单独的文件。将声明和用法累积到两个不同的数组变量中,
    @declarations
    @usages
    。读取所有环境变量并确定两个数组的内容后,打印它们:

    say for @declarations;
    say for @usages;
    
    use strict;
    use warnings;
    
    my @keys = sort keys %ENV;
    print "$_ - $ENV{$_}\n" foreach @keys;
    my $kwcnt = 1;
    print "keyword${ \( $kwcnt++ ) } \%$_\%\n" foreach @keys;
    
    您甚至可以省略第一个数组。一旦你弄清楚一个声明应该是什么,立即打印出来。您只需要累积用法,直到知道不再有声明为止

    use strict;
    use warnings;
    
    my @keys = sort keys %ENV;
    print "$_ - $ENV{$_}\n" foreach @keys;
    my $kwcnt = 1;
    print "keyword${ \( $kwcnt++ ) } \%$_\%\n" foreach @keys;
    
    我把钥匙分类一次,再检查两次


    我把钥匙分类一次,再检查两次

    这样做的目的是什么——它有什么用处?此脚本输出的使用者是什么?能否添加有关您尝试执行的操作的更多信息?你想采取什么行动还不完全清楚。如果一个变量未设置怎么办?根据设置,你想对任何给定的一个做什么?比什么好?看起来你并没有向我们展示你目前的做事方式。@Lazer:你想解决什么问题。你还没有告诉我们你到底想做什么。为什么要用这种格式打印?一旦你读了,你想做什么?你试过什么,为什么不奏效?您不理解在perl中执行此操作的语法吗?还是一个逻辑问题?@Lazer:这一点也不清楚。你说的“声明”是什么意思?你是说一个定义了的变量列表和一个没有定义的变量列表吗?它的目的是什么?它有什么用处?此脚本输出的使用者是什么?能否添加有关您尝试执行的操作的更多信息?你想采取什么行动还不完全清楚。如果一个变量未设置怎么办?根据设置,你想对任何给定的一个做什么?比什么好?看起来你并没有向我们展示你目前的做事方式。@Lazer:你想解决什么问题。你还没有告诉我们你到底想做什么。为什么要用这种格式打印?一旦你读了,你想做什么?你试过什么,为什么不奏效?您不理解在perl中执行此操作的语法吗?还是一个逻辑问题?@Lazer:这一点也不清楚。你说的“声明”是什么意思?你的意思是定义的变量列表和未定义的变量列表吗?谢谢@Rob,数组是个不错的选择,和绝对比创建两个单独的文件并连接要好。@Lazer:我认为这就是上面所有注释的要点——输出的目的是什么——为什么要输出到文件?@Ether,显然,Lazer的脚本正在生成代码,稍后由其他解释器执行。我不明白为什么会有这么多人反对使用Perl脚本来创建文件。让脚本创建一个文件,然后再由另一个脚本处理,这意味着这两个脚本可以组合在一起。谢谢@Rob,数组是一个不错的选择,和绝对比创建两个单独的文件并连接要好。@Lazer:我认为这就是上面所有注释的要点——输出的目的是什么——为什么要输出到文件?@Ether,显然,Lazer的脚本正在生成代码,稍后由其他解释器执行。我不明白为什么有这么多人反对使用一个Perl脚本来创建一个文件。让一个脚本创建一个文件,然后再由另一个脚本处理,意味着这两个脚本可以组合在一起。