0

我是 Perl 的新手。我必须让用户输入他们的全名,然后只打印第一个,最后一个,以及“最后一个,第一个”格式。

我基本上只有

chomp ($name = <\STDIN>);

至今。还有一堆没用的东西。忽略 STDIN 中的“\”,这是我的第一篇文章,我无法弄清楚格式。

解决了:

chomp ($name = <STDIN>);
$first = substr $name, 0, rindex($name, ' ');
$last = substr $name, (rindex($name, ' ')+1);
print "\nFirst Name: ".$first;
print "\nLast Name: ".$last;
print "\nLast, first: ".$last.", ".$first;

通过一些更好的谷歌搜索找到了它。

4

2 回答 2

3

假设这个名字只包含一个不包含空格的姓氏和任意数量的名字,我们可以这样做:

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

chomp(my $full_name = <>);          # read a name
my @names = split ' ', $full_name;  # split it at spaces
my $last_name = pop @names;         # remove last name from the @names
my $first_name = join ' ', @names;  # reassemble the remaining names

say "First name: $first_name";      # say is print that always appends a newline
say "Last name: $last_name";
say "Last, first: $last_name, $first_name";

总是use strict; use warnings;尽可能多地获得错误报告。如果你忽略它们,你可能有一个错误。它还强制您声明所有变量。

Perl 中很少使用类似rindex和的函数。index正则表达式通常是一种更具表现力的选择。我们也可以这样做:

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

chomp(my $full_name = <>);
my ($first_name, $last_name) = $full_name =~ /^(.*)\s+(\S+)$/;

say "First name: $first_name";
say "Last name: $last_name";
say "Last, first: $last_name, $first_name";

该正则表达式意味着:^锚定在字符串的开头,(.*)使用并记住尽可能多的字符,\s+匹配一个或多个空白字符,(\S+)使用并记住一个或多个非空白字符,$锚定在行尾。

于 2013-09-14T01:37:39.867 回答
0

请阅读 perl拆分函数。

my $data = <STDIN> 
my @values = split(' ', $data);
my $first = $values[0];
my $last = $values[1];

我希望这会有所帮助

于 2013-09-14T01:42:04.647 回答