改变元素在Perl中的位置

Vla*_*ski 1 arrays perl

所以我有一个问题,我无法解决它.如果我从Perl中的文件中读取一些单词,在该文件中单词不是有序的,而是有一个数字(作为第一个字符)应该是元素形成句子的位置.0表示位置是正确的,1表示该单词应该在位置[1]等.该文件看起来像:0This 3a 4sentence 2be 1should,并且解决方案应该看起来像0这1应该是3a 4句.

在一个for循环中,我通过文件得到的单词数组,这就是我得到第一个字符(数字)$firstCharacter = substr $words[$i], 0, 1;,但我不知道如何正确更改数组.

这是我使用的代码

#!/usr/bin/perl -w
$arg = $ARGV[0];
open FILE, "< $arg" or die "Can't open file: $!\n";
$/ = ".\n";
while($row = <FILE>)
{
    chomp $row;
    @words = split(' ',$row);
}
for($i = 0; $i < scalar @words; $i++)
{
    $firstCharacter = substr $words[$i], 0, 1;
    if($firstCharacter != 0)
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

cho*_*oba 7

只需使用排序.您可以在列表上下文中使用匹配来提取数字,使用\d+甚至可以用于> 9的数字:

#! /usr/bin/perl
use warnings;
use strict;
use feature qw{ say };

my @words = qw( 0This 3a 4sentence 2be 1should );
say join ' ', sort { ($a =~ /\d+/g)[0] <=> ($b =~ /\d+/g)[0] } @words;
Run Code Online (Sandbox Code Playgroud)

如果您不介意警告,或者您愿意关闭它们,您可以直接对单词使用数字比较,Perl将提取数字前缀本身:

no warnings 'numeric';
say join ' ', sort { $a <=> $b } @words;
Run Code Online (Sandbox Code Playgroud)