我使用以下语法得到警告 -
my %data_variables = ("Sno." => (5,0),
"ID" => (20,1),
"DBA" => (50,2),
"Address" => (80,3),
"Certificate" => (170,4),
);
Run Code Online (Sandbox Code Playgroud)
但是我在使用类似的语法时没有得到类似的警告.
my %patterns = ("ID" => ("(A[0-9]{6}?)"),
"Address" => (">([^<]*<br[^>]+>[^<]*)<br[^>]+>Phone"),
"Phone" => ("Phone: ([^<]*)<"),
"Certificate" => ("(Certificate [^\r\n]*)"),
"DBA" => ("<br[^>]+>DBA: ([^<]*)<br[^>]+>"),
);
Run Code Online (Sandbox Code Playgroud)
FMc*_*FMc 13
您需要将括号更改为方括号:
my %data_variables = (
"Sno." => [5,0],
"ID" => [20,1],
"DBA" => [50,2],
"Address" => [80,3],
"Certificate" => [170,4],
);
Run Code Online (Sandbox Code Playgroud)
散列值必须是标量值,因此您的数字列表需要存储为数组引用(因此为方括号).
在你的第二个例子中,括号是多余的,只是混淆了这个问题.每组括号只包含一个标量值(一个字符串),每个标量值都成为一个哈希值.
jkr*_*mer 11
区别在于"..."是一个字符串(单个标量),(5, 0)是两个标量的列表.所以在第一个片段中,你实际上是这样做的:
my %data_variables = ("Sno.", 5, 0, "ID", 20, 1, "Address", 80, 3, "Certificate", 170, 4);
Run Code Online (Sandbox Code Playgroud)
由于散列只是具有偶数个元素的列表,所以当元素数量是偶数时,这将起作用,但如果它像您的示例中那样奇怪则会失败.
如果要将数组作为值存储在哈希中,请[5, 0]改用.