【问题标题】:Is there a better way to achieve this using Perl? [closed]有没有更好的方法来使用 Perl 实现这一点? [关闭]
【发布时间】:2010-09-29 20:17:48
【问题描述】:

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

  1. 循环读取环境变量az的值。
  2. 根据环境变量的值,生成类似于

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

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

  3. 问题是例如我读了a,并生成了这个result文件

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

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

    a - 1,2,3,4
    b - a,b,c
    keyword1 %a%
    keyword2 %b%
    

我应该如何使用 Perl 做到这一点?

我能想到的一种方法是生成两个不同的文件——一个带有declarations,另一个带有usages,然后在执行结束时连接文件脚本。

有没有更好的办法?

【问题讨论】:

  • 这样做的目的是什么——它有什么用处?该脚本输出的使用者是什么?
  • 你能添加更多关于你想要做什么的信息吗?目前尚不完全清楚您要采取什么行动。如果未设置变量怎么办?根据设置,您想对给定的任何一个做什么?
  • 比什么好?您似乎没有向我们展示您当前的工作方式。
  • @Lazer:你想解决什么问题。您还没有告诉我们您实际上想要做什么。为什么需要以这种格式打印它们?一旦你读了它们,你想做什么?你尝试过什么,为什么没有成功?您不了解在 perl 中执行此操作的语法吗?还是逻辑问题?
  • @Lazer:这一点都不清楚。 “声明”是什么意思?你的意思是定义的变量列表和未定义的变量列表?

标签: perl environment-variables


【解决方案1】:

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

say for @declarations;
say for @usages;

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

【讨论】:

  • 感谢@Rob,数组是一个不错的选择,而且肯定比创建两个单独的文件并连接要好。
  • @Lazer:我认为这是上面所有评论者的观点——输出的目的是什么——为什么要输出到文件?
  • @Ether,显然,Lazer 的脚本正在生成稍后由其他解释器执行的代码。我不明白为什么有这么多反对使用 Perl 脚本来创建文件的想法。
  • 让一个脚本创建一个将由另一个脚本再次处理的文件意味着这两个脚本可以合并。
【解决方案2】:
use strict;
use warnings;

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

我对键排序一次,然后遍历它们两次。

【讨论】:

    猜你喜欢
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 2013-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多