Perl抛出关于语法的错误消息

Perl抛出关于语法的错误消息,perl,arrays,syntax,Perl,Arrays,Syntax,因此,在建立一个关于字符串匹配的问题的基础上,我正在将解决方案3中的信息实现为我正在处理的问题的有效解决方案 但是,我遇到了一些错误,特别是关于以下函数的这一行: next if @$args->{search_in} !~ /@$cur[1]/; syntax error at ./db_index.pl line 16, near "next " 作为一名perl新手,我的问题是我在这里做错了什么 sub search_for_key { my ($args) = @_;

因此,在建立一个关于字符串匹配的问题的基础上,我正在将解决方案3中的信息实现为我正在处理的问题的有效解决方案

但是,我遇到了一些错误,特别是关于以下函数的这一行:

next if @$args->{search_in} !~ /@$cur[1]/;

syntax error at ./db_index.pl line 16, near "next "
作为一名perl新手,我的问题是我在这里做错了什么

sub search_for_key
{
    my ($args) = @_;

    foreach $row(@{$args->{search_ary}}){
        print "@$row[0] : @$row[1]\n";
    }

    my $thiskey = NULL;
    foreach $cur (@{$args->{search_ary}}){
        print "\n" . @$cur[1] . "\n"
        next if @$args->{search_in} !~ /@$cur[1]/;
        $thiskey = @$cur[0];
        last;
    }
    return $thiskey;    
}

您在前一行的末尾省略了分号。无论如何,这就是导致语法错误的原因。我认为您也误用了$args,但如果不知道如何调用此函数,就很难确定这一点。

请注意,您确定不能仅使用哈希来完成您的操作吗?做这么简单的事似乎非常复杂:

my %hash = ( 
     key1 => 'value1',
     key2 => 'value2',
);

exists $hash{$search_in};   # true/false.
my $result = $hash{$search_in}; # returns 'value1' when $search_in is 'key1'
或者,如果需要按值搜索:

my %flip = reverse %hash;
$result = $flip{$search_in};
如果您确实需要正则表达式键或值查找:

 sub string_match {
        my ($lookup_hash, $key ) = @_;
        for my $hash_key ( %{ $lookup_hash } ){ 
            return $hash_key if $key =~ $lookup_hash->{$hash_key};
        }
        return; # not found.
 }
 my $k = string_match({
           'whitespace at end' =>  qr/\s+$/,
           'whitespace at start' => qr/^\s+/,
 }, "Some Garbage string     ");  # k == whitespace at end 

这里有几个问题

你是在严格使用;并使用警告;在你做任何其他事情之前,在你的脚本顶部?您只发布了sub,但很明显您没有使用这些

什么是空的?严格不会让你用空话。。。确保阅读更正确的方法是处理定义为真或假、未定义为真或存在为真或存在为真或不存在为真或不存在为真或不存在为真或不存在为真或不存在为真或不存在为真或不存在为真或不存在为真或不存在为真或不存在为真或不存在为真或不存在为假

失踪;打印后\n@$cur[1]\n

您的数据结构似乎太复杂了。据我所知,您正在传递对数组散列的引用,对吗?为什么您的数据结构变得非常模糊,请备份并查看您正在尝试执行的操作

Perl为您提供了很多方法。它不是严格键入的,你可以帮你自己和你的读者一个忙,把引用命名为引用的派生词。因此,例如,使用$ref2HoArefs代替$args


作为一个新手,你应该有使用严格和使用警告的习惯……并且可能从最近的一本书中学习Perl,来解释这些是为了什么以及它们为什么如此重要。为愚蠢的错误万岁。谢谢未看到该数组。此数组来自数据库select dbi:$ref=$sth->fetchall\u arrayref;。我还能用它做散列吗?@Ben,我的%hash=map{{{{$}{$sth->fetchall\u arrayref}我想是的。但它可能效率较低,这取决于您对数据进行的查找数量。明智的做法是修改语句搜索以返回正确的数据=。@Kent:Windows 1.0-3.0在工程中错过了什么,Charles Simonyi在《态度》中弥补了这一点!当然,当我们坐在这里使用他的命名惯例时,他可以乘坐俄罗斯私人火箭进入太空!我同意,5中提出的符号。太可怕了。变量应以其用途命名,而不是以其包含的数据类型命名。偶然检查将揭示复杂类型的数据结构,而简单类型已经可以从其符号中识别出来。但是,你不能从倾销中获得意图或目的;这是程序员的责任。所以,$args实际上是比$ref更好的选择…@daxim:我更喜欢知道引用的意图,而不是使用的意图。如果没有注释或命名约定,就不可能知道预期的引用是什么,也不可能知道符号是否确实正确。这里使用的意图比参考更清楚。如果你看,这也是建议的格式。。。写入:»perlreftut手册不建议变量名称编码变量类型。该文档对变量命名的所有问题都是完全沉默的,因为它的目的是介绍Perl引用语法,而不是就变量命名问题提供建议。引用它作为正确变量命名问题的权威与引用它作为正确缩进样式或任何其他样式问题的权威一样徒劳。«