Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 我们可以在散列中定义变量键吗?_Perl_Hash - Fatal编程技术网

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或其他方式定义并不重要。你必须编辑你的帖子,添加第二段代码来演示你对
(“…”,“…”)
的使用,因为对我来说,这就很清楚了。