Perl - 如何读取散列数据并用作散列数据

Perl - How to read hash data and use as hash data

我有一个以哈希数据为内容的平面数据文件。现在我想要读取文件数据并可以将其用作我的代码的 Perl 散列。文件内容如下:

我已将文件内容读取为字符串,但我无法通过读取文件内容来使用 $forum_thread_data var。

请我将其用作哈希数据。

$forum_thread_data{"9"}->{"0000"} = {
    '01' => [q~A~, q~~, q~rrdude~, q~How To Sell More To USF's Prospect/Customer Base.~, 
        q~1~, q~1~, q~02-09-2012~, q~05:00 PM~, 
        q~2455967.1700~, q~Jerry @ ASI Home Office~, q~00000595~, q~rrdude~, 
        q~02-24-2012~, q~04:28 PM~, q~2455982.1628~, q~Jerry @ ASI Home Office~, 
        q~00000595~, q~1~, ],
    '02' => [q~A~, q~~, q~rrdude~, q~Dealers MUST BE PROACTIVE and REACH OUT~, 
        q~1~, q~0~, q~03-02-2012~, q~12:28 PM~, 
        q~2455989.1228~, q~Jerry @ ASI Home Office~, q~00000595~, q~rrdude~, 
        q~03-02-2012~, q~12:28 PM~, q~2455989.1228~, q~Jerry @ ASI Home Office~, 
        q~00000595~, q~1~, ],
    '03' => [q~A~, q~~, q~rrdude~, q~Don't Forget To Line-Item The USF Discount!~, 
        q~1~, q~0~, q~03-09-2012~, q~05:20 PM~, 
        q~2455996.1720~, q~Jerry @ ASI Home Office~, q~00000595~, q~rrdude~, 
        q~03-09-2012~, q~05:20 PM~, q~2455996.1720~, q~Jerry @ ASI Home Office~, 
        q~00000595~, q~1~, ],
    '04' => [q~A~, q~~, q~rrdude~, q~Fast & Furious From USFoods!~, 
        q~1~, q~0~, q~03-15-2012~, q~12:12 PM~, 
        q~2456002.1212~, q~Jerry @ ASI Home Office~, q~00000595~, q~rrdude~, 
        q~03-15-2012~, q~12:12 PM~, q~2456002.1212~, q~Jerry @ ASI Home Office~, 
        q~00000595~, q~1~, ],
    '05' => [q~A~, q~~, q~rrdude~, q~RM Dealer Invited to FOUR USF Events!~, 
        q~1~, q~0~, q~03-15-2012~, q~02:12 PM~, 
        q~2456002.1412~, q~Jerry @ ASI Home Office~, q~00000595~, q~rrdude~, 
        q~03-15-2012~, q~02:12 PM~, q~2456002.1412~, q~Jerry @ ASI Home Office~, 
        q~00000595~, q~1~, ],   
};
1;

这就是 eval command 的用途。如果你把整个东西放在一个字符串中,比方说 $foo,你可以执行以下操作:

my %forum_thread_data;
eval $foo;

首先您需要声明散列。在那之后,你 eval 字符串。

请注意 eval 是危险的。您永远不知道文件中可能包含什么。如果它是一些错误的代码,你会 运行 它。


如果数据在一个没有其他任何内容的文本文件中,另一种方法是 requiredo 文件。

使用require,您只能加载一次。可能最好只使用 do,它将像代码一样读取和执行文件。同样,如果文件中没有该变量,则需要声明该变量。

my $forum_thread_data;
do 'foo.dump';

同样的警告适用。如果这是 Data::Dumper、Data::Dump 或您自己的代码的类似输出,则应保存以执行此操作。另请注意,有比转储 Perl 数据结构更快的序列化格式。