Perl: Variable is printed as SCALAR(0x7faf2b804240)

落爺英雄遲暮 提交于 2019-12-12 02:29:17

问题


I have a variable that performs well in one section of my code, but not in another. I will attempt to truncate my very long code to give you an idea of what is going on. I will name the variable in question simply "$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; 

Now I will omit the long subroutines for readability's sake. I am assuming they won't help in solving this problem, since I believe they produce my expected output without error. $QuestionableVariable works well in the above section of code but below I will show you the end of my program, after the appearance of the subroutines, where it does not work well.

    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";  

The code runs without error, but in place of the value of $QuestionableVariable I get SCALAR(0x7faf2b804240). How can I get the value of the variable instead? Thanks


回答1:


Your "working" line uses $$QuestionableVariable, not $QuestionableVariable.

Now I will omit the long subroutines for readability's sake. I am assuming they won't help in solving this problem

Bad assumption. Apparently LongSubroutine returns a reference to a scalar, not a plain string. That's why you get SCALAR(0x7faf2b804240) as output: That's what references look like when printed.

$$QuestionableVariable dereferences the reference to get at the contents, which seems to be working fine.

If you change your last line to

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

it should work as you expect.



来源:https://stackoverflow.com/questions/38044668/perl-variable-is-printed-as-scalar0x7faf2b804240

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!