Perl 我们可以在散列中定义变量键吗?
我正在尝试创建如下哈希:Perl 我们可以在散列中定义变量键吗?,perl,hash,Perl,Hash,我正在尝试创建如下哈希: my $block_name = pm88_60_464 ; my %hash_for_tstamp = qw ( layout/${block_name}.proj/tech ap_db_time rpts/sem_check/sem_check_analysis.rpt sem_analysis ); my $key; my $value; while (($key,$value) = each (%hash_
my $block_name = pm88_60_464 ;
my %hash_for_tstamp = qw (
layout/${block_name}.proj/tech ap_db_time
rpts/sem_check/sem_check_analysis.rpt sem_analysis
);
my $key;
my $value;
while (($key,$value) = each (%hash_for_tstamp)) {
${$time_summary}{"$value"} = ctime(stat($key)->mtime) ;
}
当运行上面的代码时,我得到下面的错误
stat() on unopened filehandle File::stat::layout/${block_name}.proj/tech .
Can't call method "mtime" on an undefined value at audit_automation.pl line 205.
因此,我对这个错误的理解是,允许在散列中包含变量键。问题在于变量插值,或者在使用
qw/
构造时缺少变量插值。如中所述,qw/
中没有变量插值
您可以通过使用适当的类似引号的构造来解决这种情况;在这种情况下,需要变量插值的地方使用双引号。下面是一个例子:
my $block_name = "pm88_60_464";
my %hash_for_tstamp = (
"layout/${block_name}.proj/tech", "ap_db_time",
"rpts/sem_check/sem_check_analysis.rpt", "sem_analysis"
);
while ( my ($key,$value) = each (%hash_for_tstamp) ) {
print "($key),($value)\n";
}
问题在于使用
qw/
构造时变量插值或缺少变量插值。如中所述,qw/
中没有变量插值
您可以通过使用适当的类似引号的构造来解决这种情况;在这种情况下,需要变量插值的地方使用双引号。下面是一个例子:
my $block_name = "pm88_60_464";
my %hash_for_tstamp = (
"layout/${block_name}.proj/tech", "ap_db_time",
"rpts/sem_check/sem_check_analysis.rpt", "sem_analysis"
);
while ( my ($key,$value) = each (%hash_for_tstamp) ) {
print "($key),($value)\n";
}
问题在于
qw/
quote-like构造内部没有变量插值。请使用逗号分隔的列表,必要时对单个组件使用双引号。谢谢您的快速回复。所以你的意思是,如果我不通过qw定义我的散列,那么它应该可以工作?是的,使用(“…”,“…”)
代替qw/…/
,我也尝试过这种方法,但它不起作用。我认为通过qw或其他方式定义并不重要。你必须编辑你的帖子,添加第二段代码来演示你对(“…”,“…”)
的使用,因为对我来说,这就很清楚了。问题是qw/
类似引号的结构中没有变量插值。请使用逗号分隔的列表,必要时对单个组件使用双引号。谢谢您的快速回复。所以你的意思是,如果我不通过qw定义我的散列,那么它应该可以工作?是的,使用(“…”,“…”)
代替qw/…/
,我也尝试过这种方法,但它不起作用。我认为通过qw或其他方式定义并不重要。你必须编辑你的帖子,添加第二段代码来演示你对(“…”,“…”)
的使用,因为对我来说,这就很清楚了。