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
是危险的。您永远不知道文件中可能包含什么。如果它是一些错误的代码,你会 运行 它。
如果数据在一个没有其他任何内容的文本文件中,另一种方法是 require
或 do
文件。
使用require
,您只能加载一次。可能最好只使用 do
,它将像代码一样读取和执行文件。同样,如果文件中没有该变量,则需要声明该变量。
my $forum_thread_data;
do 'foo.dump';
同样的警告适用。如果这是 Data::Dumper、Data::Dump 或您自己的代码的类似输出,则应保存以执行此操作。另请注意,有比转储 Perl 数据结构更快的序列化格式。
我有一个以哈希数据为内容的平面数据文件。现在我想要读取文件数据并可以将其用作我的代码的 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
是危险的。您永远不知道文件中可能包含什么。如果它是一些错误的代码,你会 运行 它。
如果数据在一个没有其他任何内容的文本文件中,另一种方法是 require
或 do
文件。
使用require
,您只能加载一次。可能最好只使用 do
,它将像代码一样读取和执行文件。同样,如果文件中没有该变量,则需要声明该变量。
my $forum_thread_data;
do 'foo.dump';
同样的警告适用。如果这是 Data::Dumper、Data::Dump 或您自己的代码的类似输出,则应保存以执行此操作。另请注意,有比转储 Perl 数据结构更快的序列化格式。