我一直在浏览有关此错误消息的已回答问题。
我正在尝试解决 Rosalind web site 中的问题使用二分搜索查找一些索引。
当我的子例程找到该数字时,它似乎会忽略它,如果我尝试打印 $found
变量,它会给我错误
Can't use string "1" as a symbol ref while strict refs is in use
代码是这样的
sub binarysearch
{
my $numbertolook = shift;
my @intarray=@_;
my $lengthint = scalar @intarray;
my @sorted = sort {$a <=> $b} @intarray;
#print $numbertolook, " " , @sorted, "\n";
my $low=0;
my $high=$lengthint-1;
my $found =undef;
my $midpoint;
while ($low<$high)
{
$midpoint=int(($low+$high)/2);
#print $midpoint, " ",$low," ", $high, " ", @sorted, "\n";
if ($numbertolook<$sorted[$midpoint])
{
$high=$midpoint;
}
elsif ($numbertolook>$sorted[$midpoint])
{
$low=$midpoint;
}
elsif ($numbertolook==$sorted[$midpoint])
{
$found=1;
print $found "\n";
last;
}
if ($low==$high-1 and $low==$midpoint)
{
if ($numbertolook==$sorted[$high])
{
$found=1;
print $found "\n";
last;
}
$low=$high;
}
}
return $found;
}
最佳答案
你想要
print $found, "\n";
或者
print $found . "\n";
由于 $found 和换行符之间没有运算符,它认为 $found 是要打印换行符的文件句柄,并且会收到错误,因为它不是文件句柄。
关于perl - 二分搜索 - 在使用严格引用时不能使用字符串 "1"作为符号引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35830506/