什么是Perl中的@$变量?

4

示例:

 foreach my $var (@$tp)  
      {  
        my $sql=$startsql1.$var.$endsql1;  
        print " SQL stamt \n $sql \n";  
        my $sel_stmt=$dbh->prepare($sql);  
        $sel_stmt->execute() or warn $DBI::errstr;  
        my @result = $sel_stmt->fetchrow_array();  
        $sel_stmt->finish();  
        $tphash{$result[0]} = [ @result ];          
     }  
  • @tp 是一个数组。当我打印 $var 时,它没有输出任何内容。

1
$tp是一个数组的引用,所以@$tp将它解除引用并转换为一个数组。 - rbm
这段代码中没有任何 @tp 数组。你的代码中是否有 @tp 并且正在尝试在此循环中迭代它?如果是这样,那么你可能是打错了 @$tp,而实际上你想要的是 @tp。确保在你编写的每个 Perl 程序的顶部加上 use strict;use warnings; - Paul L
1个回答

19

@$在上下文中不是一个变量,而是一种解引用操作。

$tp是一个数组的引用。@$tp表示“解引用并给我值”,也可以写成@{$tp}

例如:

my @array = ( 1, 2, 3 );
my $array_ref = \@array; 
print "REF: ", $array_ref,"\n";
print "VALUES: ", join " ", @$array_ref; 

通过使用方括号,您可以创建一个没有实际数组的数组引用:

my $array_ref = [ 1, 2, 3 ];

1
@DipitSethi 你应该验证答案(左侧的勾号)。 - nanocv
嘿,你能帮我解决这个问题吗 -> DBD::SQLAnywhere初始化失败:DBD::SQLAnywhere->driver没有返回句柄,我在运行代码时遇到了这个问题。还有一个带有数据库连接的代码,我也为其放置了查询。 - Dipit Sethi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接