ZetCode

Perl reverse 函数

最后修改于 2025 年 4 月 4 日

Perl 的 reverse 函数可以反转列表元素的顺序或字符串的字符顺序。它的行为取决于它被使用的上下文。

在列表上下文中,reverse 会反转列表元素的顺序。在标量上下文中对字符串使用时,它会反转字符顺序。它不会修改原始数据。

基本字符串反转

reverse 最简单的用法是在标量上下文中反转字符串。

string_reverse.pl
#!/usr/bin/perl

use strict;
use warnings;
use v5.34.0;

my $text = "Hello World";
my $reversed = reverse $text;

print "Original: $text\n";
print "Reversed: $reversed\n";

此示例在标量上下文中演示了字符串反转。reverse 函数返回一个字符顺序颠倒的新字符串。

$ ./string_reverse.pl
Original: Hello World
Reversed: dlroW olleH

列表反转

在列表上下文中,reverse 会反转元素的顺序。

list_reverse.pl
#!/usr/bin/perl

use strict;
use warnings;
use v5.34.0;

my @numbers = (1..5);
my @reversed = reverse @numbers;

print "Original: @numbers\n";
print "Reversed: @reversed\n";

这演示了列表反转。该函数返回一个元素顺序颠倒的新数组,而原始数组保持不变。

$ ./list_reverse.pl
Original: 1 2 3 4 5
Reversed: 5 4 3 2 1

在列表上下文中反转字符串

在列表上下文中对字符串使用 reverse 时,行为会发生变化。

string_list_context.pl
#!/usr/bin/perl

use strict;
use warnings;
use v5.34.0;

my $text = "Hello";
my @chars = reverse $text;

print "Original: $text\n";
print "Reversed as list: @chars\n";

在列表上下文中,字符串被视为字符列表。该函数返回反转后的列表,而不是反转后的字符串。

$ ./string_list_context.pl
Original: Hello
Reversed as list: o l l e H

反转哈希键

reverse 可以帮助按反转顺序处理哈希键。

hash_reverse.pl
#!/usr/bin/perl

use strict;
use warnings;
use v5.34.0;

my %fruit = (
    apple => 3,
    banana => 7,
    cherry => 2
);

my @reversed_keys = reverse keys %fruit;

print "Original order: ", join(', ', keys %fruit), "\n";
print "Reversed order: ", join(', ', @reversed_keys), "\n";

此示例反转了哈希键的顺序。请注意,在 Perl 中哈希键的顺序通常是任意的。

$ ./hash_reverse.pl
Original order: banana, apple, cherry
Reversed order: cherry, apple, banana

与其他函数结合使用

reverse 通常与其他列表操作结合使用。

combined.pl
#!/usr/bin/perl

use strict;
use warnings;
use v5.34.0;

my @words = qw(apple banana cherry date elderberry);
my @sorted_reversed = reverse sort @words;

print "Original: @words\n";
print "Sorted and reversed: @sorted_reversed\n";

在这里,我们首先按字母顺序对列表进行排序,然后反转排序后的顺序。这表明 reverse 可以作为处理管道的一部分。

$ ./combined.pl
Original: apple banana cherry date elderberry
Sorted and reversed: elderberry date cherry banana apple

反转文件中的行

reverse 可以按反转顺序处理文件内容。

file_reverse.pl
#!/usr/bin/perl

use strict;
use warnings;
use v5.34.0;

open(my $fh, '<', 'data.txt') or die "Can't open file: $!";
my @lines = <$fh>;
close($fh);

my @reversed_lines = reverse @lines;

print "Original first line: $lines[0]";
print "Reversed first line: $reversed_lines[0]";

此脚本将文件读取到一个数组中,然后反转行的顺序。最后一行变成第一行,反之亦然。

创建回文检查器

reverse 可以帮助识别回文串。

palindrome.pl
#!/usr/bin/perl

use strict;
use warnings;
use v5.34.0;

sub is_palindrome {
    my $word = lc shift;
    $word =~ s/\W//g;  # Remove non-word characters
    return $word eq reverse $word;
}

print "Enter a word: ";
my $input = <STDIN>;
chomp $input;

if (is_palindrome($input)) {
    print "'$input' is a palindrome\n";
} else {
    print "'$input' is not a palindrome\n";
}

此示例检查一个单词是否正反读都相同。我们首先清理输入以处理标点符号和大小写敏感性。

$ ./palindrome.pl
Enter a word: Racecar
'Racecar' is a palindrome

最佳实践

来源

Perl reverse 文档

本教程通过实际示例涵盖了 Perl 的 reverse 函数,展示了其在字符串、列表和文件中的用法。

作者

我叫 Jan Bodnar,是一名充满热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面有十多年的经验。

列出 所有 Perl 教程