String 如何在Perl中反转数字字符串?

String 如何在Perl中反转数字字符串?,string,perl,numbers,reverse,delimited-text,String,Perl,Numbers,Reverse,Delimited Text,我有一个包含数值的字符串。我想以相反的顺序显示数值 一个不起作用的想法是使用内置的反转功能: my $j = "12,11,10,9"; my $k = reverse($j); print $k; 但该代码输出: 9,01,11,21 当我们需要时: 9,10,11,12 简明版本: my $j = "12,11,10,9"; print join ",", reverse split /,/, $j; 括号版本: my $j = "12,11,10,9"; print(join(",

我有一个包含数值的字符串。我想以相反的顺序显示数值

一个不起作用的想法是使用内置的反转功能:

my $j = "12,11,10,9";
my $k = reverse($j);
print $k;
但该代码输出:

9,01,11,21
当我们需要时:

9,10,11,12
简明版本:

my $j = "12,11,10,9";
print join ",", reverse split /,/, $j;
括号版本:

my $j = "12,11,10,9";
print(join(",", reverse(split(/,/, $j))));
如果我稍微分解一下:

my $j = "12,11,10,9";
my @j = split /,/, $j;
print join ",", reverse @j;
输出

9,10,11,12
注意

  • 请参见
    perldoc-f反向

将字符串放入数组,然后反转数组输出。 您只是将整个字符串颠倒过来

@j_array = split(/,/, $j);

由于您没有提供任何有关输入来源的信息,因此除了常见的
反向()回答之外,还有一种选择是发出
排序

my$j=“12,11,10,9”;
my$k=join','排序{$a$b}split/,/,$j;
打印$j,“\n”;
打印$k;

同样的事情被分解成更多的行:

my$j=“12,11,10,9”#原始字符串
我的@k=split','j;#把数字分成一个数组
@k=sort{$a$b}@k;#应用排序(可以使用“reverse()”代替)
我的$k=加入“,”,@k;#用逗号组合数字
打印$j,“\n”;
打印$k;

OP要求逆序,他的字符串只是一个例子,他从来没有要求对它进行排序。@sputnick:在我回答之前,你认为逆序做什么?既然你没有回答,
reverse
是地址/字节排序。OP没有询问“反向”是如何确定的(通过编程或由程序员确定)。它可以是一个简单的,简短的脚本,对于你我都知道,所有的输入可以是降序的。因此,上面的(升序排序)是他给出的降序字符串的相反顺序。@vol7ron:可能是这样,但在您以相反的地址顺序实现比较器排序之前,使用
排序
是错误的。@CharlesStewart:仍然完全一致-没有任何其他示例,这就是我一直在强调的一点——如果OP使用的是一个CSV文件,其中包含了一系列的倒计时,那么上面的内容就可以满足需要。这种替代解决方案背后的部分原因是,让海报睁大眼睛,看看人们如何
排序
。如果OP不知道如何正确拆分/连接字符串,那么他可能也不知道如何排序。我仍然支持将所选答案作为最佳答案,并且我仍然支持将其作为附加答案提供的选择。最好始终编写
split/,/
,以提醒您它是一个正则表达式,而不是一个固定字符串。有太多人尝试过像
split“|”
这样的方法,却不知道它为什么不“起作用”。
reverse
并不希望得到一个确切的列表。它适用于列表和标量
perl-le'$\=反向“IAHO”;打印“
my $j = "12,11,10,9";
my $k = join ',' , sort {$a <=> $b} split /,/ , $j;

print $j, "\n";
print $k;
my $j = "12,11,10,9";        # Original string
my @k = split ',', $j;       # Breaking the numbers into an array
@k = sort {$a <=> $b} @k;    # Applying a sort (could use "reverse()" in its place)
my $k = join ',' , @k;       # Combine the numbers with a comma

print $j,"\n";
print $k;