【问题标题】:Read a file and apply the operation and store it [closed]读取文件并应用操作并将其存储[关闭]
【发布时间】:2016-07-12 19:18:15
【问题描述】:

假设我有一个名为 param.txt 的文件。它包含,

param1 = 5;
param2 = 10;
param3 = 12;
param4 = 5;
param5 = param1 + param2;
param6 = param2 * param1;
param7 = param5 - param2;
param8 = param1 * param2 - param4;

我在 perl 脚本中读取这个文件,并将所有参数值存储到 param4 中。

我将如何存储 param5,param6,param7,param8 通过应用仅通过读取文件和构建哈希的预期操作?

【问题讨论】:

    标签: regex perl hash


    【解决方案1】:

    简单的方法是使用带有 perl 代码和 eval 的正则表达式:

    use strict;
    use warnings;
    use v5.10;
    use Data::Dumper;
    
    my %ns = ();
    
    while( my $line = <> )
    {
        chomp($line);
        next unless ($line);
    
        my ($term, $expr) = split m/\s*=\s*/, $line;
    
        if( $term && $expr )
        {
            $expr =~ s/(\w+)/exists $ns{$1} ? $ns{$1}: $1/ge;
            $ns{$term} = eval $expr;
            warn $@ if $@;
        }
    }
    
    say Dumper(\%ns);
    

    【讨论】:

    • 看起来很漂亮,但不是eval {param1 + param2} 而不是eval {$param1 + $param2}(没有$s?)
    • regex 用它们之前定义的值替换术语
    • 啊,现在我明白了。甚至更漂亮。你的代码不是eval {param1+param2},而是eval {5+10}。酷。
    猜你喜欢
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    • 2020-10-18
    • 2013-05-29
    相关资源
    最近更新 更多