Perl:变量打印为SCALAR(0x7faf2b804240)

时间:2016-06-27 01:14:35

标签: perl variables reference scalar

我有一个变量在我的代码的一个部分中表现良好,但在另一部分中表现不佳。我将尝试截断我的长代码,让您了解正在发生的事情。我将简单地命名为“$ QuestionableVariable”的变量。

    #!/usr/bin/perl 
    use warnings; 
    use strict;  

    my $QuestionableVariable = LongSubroutine("file.txt"); 
    my $WindowSize = 16; 
    my $StepSize = 1; 
    my %hash = (); 

    for ( 
            my $windowStart = 0; 
            $windowStart <= 140; 
            $windowStart += $StepSize 
    ) 
    { 
    my $Variable_1 = substr($$QuestionableVariable, $windowStart, $WindowSize); #here $QuestionableVariable works well 
    my $Variable_2 = 'TAGCTAGCTAGCTAGC'; 
    my $dist = AnotherLongSubroutine($Variable_1, $Variable_2); 
    $hash{$dist} = $Variable_1; 

现在为了便于阅读,我将省略长子程序。我假设他们无法帮助解决这个问题,因为我相信他们会毫无错误地产生我预期的输出。 $ QuestionableVariable在上面的代码段中工作得很好,但是下面我会告诉你程序的结束,在子程序出现后,它不能正常工作。

    my @keys = sort {$a <=> $b} keys %hash; 
    my $BestMatch = $hash{keys[0]}; 

    print "Distance_of_Best_Match: $keys[0] Sequence_of_best_match: $BestMatch", "\n", "$QuestionableVariable", "\n";  

代码运行没有错误,但是代替$ QuestionableVariable的值,我得到了SCALAR(0x7faf2b804240)。 我怎样才能获得变量的值? 感谢

1 个答案:

答案 0 :(得分:1)

您的“工作”行使用的是$$QuestionableVariable,而不是$QuestionableVariable

  

现在为了便于阅读,我将省略长子程序。我假设他们无法帮助解决这个问题

糟糕的假设。显然LongSubroutine返回对标量的引用,而不是纯字符串。这就是为什么你得到SCALAR(0x7faf2b804240)作为输出:这就是打印时引用的样子。

$$QuestionableVariable取消引用内容的引用,这似乎工作正常。

如果您将最后一行更改为

print "Distance_of_Best_Match: $keys[0] Sequence_of_best_match: $BestMatch\n", "$$QuestionableVariable\n";

它应该按预期工作。