我正在從codeeval.com的挑戰練習Perl,我得到一個意外的錯誤。我們的目標是逐行遍歷一個文件,其中每行都有一個字符串和一個用逗號分隔的字符,並在該字符串中查找該字符的最右側。我得到錯誤的答案回來,所以我改變了代碼打印出來只是變量值,當我得到了以下錯誤:Perl - 不能使用字符串(...)作爲數組參考
Can't use string ("Hello world") as an ARRAY ref while "strict refs" in use at char_pos.pl line 20, <FILE> line 1.
我的代碼如下。您可以在標題中看到來自文件的示例。您還可以看到原始輸出代碼,該代碼不正確地只顯示每個字符串中最右側的字符。
#CodeEval challenge: https://www.codeeval.com/open_challenges/31/
#Call with $> char_pos.pl numbers
##Hello world, d
##Hola mundo, H
##Keyboard, b
##Connecticut, n
#!/usr/bin/perl
use strict;
use warnings;
my $path = $ARGV[0];
open FILE, $path or die $!;
my $len;
while(<FILE>)
{
my @args = split(/,/,$_);
$len = length($args[0]) - 1;
print "$len\n";
for(;$len >= 0; $len--)
{
last if $args[0][$len] == $args[1];
}
#if($len > -1)
#{
# print $len, "\n";
#}else
#{
# print "not found\n";
#}
}
編輯: 基於下面的答案,這裏是我開始工作的代碼:
#!/usr/bin/perl
use strict;
use warnings;
use autodie;
open my $fh,"<",shift;
while(my $line = <$fh>)
{
chomp $line;
my @args = split(/,/,$line);
my $index = rindex($args[0],$args[1]);
print $index>-1 ? "$index\n" : "Not found\n";
}
close $fh;
如果您正在比較字符串,請檢查'perldoc substr'而不是$ $ args [0] [$ len]'並使用'eq'。 – 2014-09-05 13:54:45
並使用'while(<>){...}'而不是明確地打開文件等;它更習慣Perl。當你檢查文檔時(注意它需要'perldoc -f substr'來查找函數'substr'的名字),查找'perldoc -f rindex'。您可能希望在'/,* /'上進行分割,以便在尾部的字母之前留出空格。 – 2014-09-05 14:09:42
提示:您可能更喜歡'我的($字,$字母)=拆分(/,/,$ _);'。 '@ args'是相當可憐的名字。 – ikegami 2014-09-05 15:17:34