Perl - 如何读取哈希数据并用作哈希数据

时间:2015-02-24 05:09:07

标签: perl file hash

我有平面数据文件,其中哈希数据作为内容。现在我希望读取文件数据,并可以将我的代码用作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;

1 个答案:

答案 0 :(得分: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数据结构更快。

相关问题