-4

我需要使用 Perl 循环移位一些字符/位

例如,使用以下输入(反转字符串):

1010
1110
hello

我需要获得:

0101
0111
olleh

如何使用 Perl 实现这一点?

4

2 回答 2

3

好像你想反转一个字符串而不是循环移位!

$string=reverse($string);
于 2012-09-17T20:56:23.717 回答
1

但是,如果你真的想循环移位值,很容易编写一个函数来使用任意列表进行训练:

#!/usr/bin/env perl

use strict;
use warnings;
use feature 'say';

# circular shift lists
sub circular {
    my ($i, @values) = @_;
    return @values[ map +($_ + $i) % @values => 0 .. $#values ];
}

say circular  4, 1 .. 9;                # 567891234
say circular -2, 1 .. 9;                # 891234567
say circular  3, split '' => 'hello';   # lohel

几句解释的returncircular

return @values[ ... ];

我们在@values这里返回一个数组切片,这意味着我们使用索引列表对其进行评估并返回值列表。

map ... => 0 .. $#values

我们在这里返回一个值列表,我们根据@values 的所有索引计算,0 是第一个,$#values是最后一个。

+($_ + $i) % @values

这就是我们对这些索引所做的事情。该+符号仅用于告诉 perl 括号不是map. 我们将 $i 添加到索引中,并防止它变成> $#values我们将它模除以 的长度@values。请注意,length @values在这里调用并不重要,因为%在标量上下文中评估其第二个操作数,而在标量上下文中评估其长度的数组。

我把它留给你作为一个简单的练习来将你的东西转换为hello1110列表并返回到标量。

于 2012-09-18T09:41:14.637 回答