-1

我是 Perl 的新手,做一些需要我通过函数输入和输出变量的练习。我使用全局变量创建了相同的脚本,并且它有效,但是在我尝试使用我的并将所有内容设置为严格之后,我遇到了一堆问题。我的语法关闭了吗?还是更基本的东西?任何帮助,将不胜感激:

#!/usr/bin/perl -w
use warnings;
use strict;
use DBI;
use Getopt::Std;

getopt('s:');
my $opt_s;
my $search = $opt_s;
my @array = &function1();
my $arrayvalue = &function2();
&function1($search);
&function2(@array);
if (&function2(@array) != 0 {
    print "no values found for '$search'","\n"};

sub function1 {

my search = $_[0];
our $dbh = DBI->connect("dbi:mysql:dbname=database, "user", "password")
    or die $DBI::errstr;
my $sql = $dbh->selectall_arrayref("SELECT Player from Players_Sport where Sport like '$search'")
or die $DBI::errstr;
my @array = map { $_->[0] } @$sql;
$dbh->disconnect
    or warn "Disconnection failed: $DBI::errstr\n";
return @array;
}

sub function2 {
my $arrayvalue=()
my @array = $_[0];
print join("\n", @array, "\n");
if(scalar (@array) == 0) {
    $arrayvalue = -1;
}
    else {$arrayvalue = 0;
};
return $arrayvalue;

}
4

1 回答 1

4

这段代码有很多问题(从主要的问题,比如不可编译,所以我什至不知道你是如何得到运行时错误的),到小的文体问题。

但是,由于您谈论变量传递,因此我将在该部分归零。


这里是你调用你的函数的地方:

my @array = &function1();
my $arrayvalue = &function2();
&function1($search);
&function2(@array);

因此,您首先function1不带参数调用(这可能会运行不正确,因为您没有传递搜索字符串 - 并导致uninitialized value $search in concatenation您在评论中提到的错误),并将一个空数组结果分配给@array.

然后,您function1 再次调用,这次正确(传递 $search 参数),但忽略返回值(因此@array第一次调用时将保持为空)。

第二个功能也有同样的问题。

这应该是:

my @array = function1($search);
my $arrayvalue = function2(@array);

第二个大问题是您将数据作为数组传递给第二个函数,但在函数内部将其分配为标量(大概就像您传递了数组引用一样)。

你的代码:

# Called via "function2(@array)";
my @array = $_[0];

如果你打算传递一个数组,你需要将参数数组作为一个整体来处理:

# Called via "function2(@array)";
my @array = @_; 

而如果您打算通过引用传递,则作为单个数组引用参数(这是一种更先进的技术,但出于各种原因强烈建议不要传递数组):

# Called via "function2(\@array)";
# Notice the "\" in front of "@" - this is a "take a reference" operator
my $arrayRef = $_[0]; # We only take 1 parameter, the array reference, now
my @array = @$arrayRef; # Dereference array ref into an array. 
# You can also use arrayref directly instead once you learn about data structures
于 2013-05-10T17:33:03.533 回答