有没有更好的方法来实现这个使用Perl?

时间:2010-09-29 20:17:48

标签: perl environment-variables

我正在写一个执行此操作的Perl脚本:

  1. 在循环中将环境变量a的值读取到z
  2. 根据环境变量的值,生成类似于

    结果文件
    a - 1,2,3,4
    b - a,b,c
    c - $234.34,$123.12
    keyword1 %a%
    keyword2 %b%
    keyword3 %c%
    

    需要注意的是,所有声明必须在用法之前。

  3. 问题在于,例如我阅读a,并生成结果文件

    a - 1,2,3,4
    keyword3 %c%
    

    现在,当我阅读b时,我需要结果文件看起来像这样

    a - 1,2,3,4
    b - a,b,c
    keyword1 %a%
    keyword2 %b%
    
  4. 我应该如何使用Perl执行此操作?

    我能想到的一种方法是生成两个不同的文件 - 一个带有声明,另一个带有用法,然后在执行结束时连接文件的剧本。

    有更好的方法吗?

2 个答案:

答案 0 :(得分:5)

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

say for @declarations;
say for @usages;

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

答案 1 :(得分:1)

use strict;
use warnings;

my @keys = sort keys %ENV;
print "$_ - $ENV{$_}\n" foreach @keys;
my $kwcnt = 1;
print "keyword${ \( $kwcnt++ ) } \%$_\%\n" foreach @keys;

我对键进行了一次排序,然后两次运行。