Perl 无法修改数组参数

Perl 无法修改数组参数,perl,Perl,这应该将nums的内容按降序排列,但是sort不会更改nums的内容。我读过的许多网站都说是通过引用传递的,但我认为我没有正确地去引用这个论点。请注意,这是我的第一个Perl程序:) #/usr/bin/env perl 子分类{ 我的@arr=@; my$len=标量@arr; 对于(我的$i=1;$i

这应该将
nums
的内容按降序排列,但是
sort
不会更改
nums
的内容。我读过的许多网站都说是通过引用传递的,但我认为我没有正确地去引用这个论点。请注意,这是我的第一个Perl程序:)

#/usr/bin/env perl
子分类{
我的@arr=@;
my$len=标量@arr;
对于(我的$i=1;$i<$len-1;$i=$i+1){
我的$max=$i;
对于(my$j=$i+1;$j<$len;$j=$j+1){
如果($arr[$j]>$arr[$max]){
$max=$j
}
}
$temp=$arr[$max];
$arr[$max]=$arr[$i];
$arr[$i]=$temp;
}
}
打印“输入10个数字:”;
我的$number=;
my@nums=拆分“”,$number;
打印“未排序:@nums\n”;
排序\@nums;
打印“排序:@nums\n”;

@Matt Jacob帮我解决了这个问题。这就是我要找的

#! /usr/bin/env perl

sub selection_sort {
    my $arr = shift;
    my $len = scalar @$arr;

    for (my $i = 0; $i < $len-1; $i++) {
        my $max = $i;
        for (my $j = $i + 1; $j < $len; $j++) {
            if (@$arr[$j] > @$arr[$max]) {
                $max = $j
            }
        }
        my $temp = @$arr[$max];
        @$arr[$max] = @$arr[$i];
        @$arr[$i] = $temp;
    }
}

print "Enter 10 numbers: ";
my $input = <STDIN>;
my @integers = split ' ', $input;

print "Unsorted: @integers\n";
selection_sort \@integers;
print "Sorted: @integers\n";
#/usr/bin/env perl
子选择和排序{
我的$arr=班次;
my$len=标量@$arr;
对于(我的$i=0;$i<$len-1;$i++){
我的$max=$i;
对于(my$j=$i+1;$j<$len;$j++){
如果(@$arr[$j]>@$arr[$max]){
$max=$j
}
}
我的$temp=@$arr[$max];
@$arr[$max]=@$arr[$i];
@$arr[$i]=$temp;
}
}
打印“输入10个数字:”;
我的$input=;
my@integers=拆分“”,$input;
打印“未排序:@integers\n”;
选择\排序\整数;
打印“排序:@integers\n”;

@Matt Jacob帮我解决了这个问题。这就是我要找的

#! /usr/bin/env perl

sub selection_sort {
    my $arr = shift;
    my $len = scalar @$arr;

    for (my $i = 0; $i < $len-1; $i++) {
        my $max = $i;
        for (my $j = $i + 1; $j < $len; $j++) {
            if (@$arr[$j] > @$arr[$max]) {
                $max = $j
            }
        }
        my $temp = @$arr[$max];
        @$arr[$max] = @$arr[$i];
        @$arr[$i] = $temp;
    }
}

print "Enter 10 numbers: ";
my $input = <STDIN>;
my @integers = split ' ', $input;

print "Unsorted: @integers\n";
selection_sort \@integers;
print "Sorted: @integers\n";
#/usr/bin/env perl
子选择和排序{
我的$arr=班次;
my$len=标量@$arr;
对于(我的$i=0;$i<$len-1;$i++){
我的$max=$i;
对于(my$j=$i+1;$j<$len;$j++){
如果(@$arr[$j]>@$arr[$max]){
$max=$j
}
}
我的$temp=@$arr[$max];
@$arr[$max]=@$arr[$i];
@$arr[$i]=$temp;
}
}
打印“输入10个数字:”;
我的$input=;
my@integers=拆分“”,$input;
打印“未排序:@integers\n”;
选择\排序\整数;
打印“排序:@integers\n”;


@
包含一个元素,该元素是对数组的引用。这有帮助吗?应该是
my$arr=shift
,但是我将
打印“@\un”
放在
排序
的顶部,运行时没有输出。不确定发生了什么。
sort
是Perl中的内置函数,这就是您要调用的。有很多方法可以绕过具有相同名称的用户定义函数,但是选择不同的名称更容易、更好。谢谢,我想知道为什么
strict
抱怨调用
sort
没有用。我发现您可以通过调用
@$arr[…]
来获取值。此外,Perl数组是0索引的。
@
包含一个元素,它是对数组的引用。这有帮助吗?应该是
my$arr=shift
,但是我将
打印“@\un”
放在
排序
的顶部,运行时没有输出。不确定发生了什么。
sort
是Perl中的内置函数,这就是您要调用的。有很多方法可以绕过具有相同名称的用户定义函数,但是选择不同的名称更容易、更好。谢谢,我想知道为什么
strict
抱怨调用
sort
没有用。我发现您可以通过调用
@$arr[..]
来获取值。此外,Perl数组是0索引的。这将起作用,但您将看到的更典型的解引用形式是
$arr->[$I]
我见过操作符,但它提到了一些关于对象成员的内容。感谢您的提示您确定要在此处使用数组切片吗?提示:
对于(我的$i=0;$i<$len-1;$i++)
对于我的$i(0..$len-2)
编写得更好。同样,对于我的$j($i+1..$len-1)
,内部循环编写得更好;您可以使用
($x,$y)=($y,$x)
这会起作用,但您将看到的更典型的解引用形式是
$arr->[$i]
我见过操作符,但它提到了一些关于对象成员的内容。感谢您的提示您确定要在此处使用数组切片吗?提示:
对于(我的$i=0;$i<$len-1;$i++)
对于我的$i(0..$len-2)
编写得更好。同样,对于我的$j($i+1..$len-1)
,内部循环编写得更好;您可以使用
($x,$y)=($y,$x)