我是Perl的新手。我必须让用户输入他们的全名,然后打印第一个,最后一个,以及“last,first”格式。
我基本上只有
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;
通过一些更好的谷歌搜索得知它。
答案 0 :(得分: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+
匹配一个或多个空白字符,{{1}消耗并记住一个或多个非空白字符,(\S+)
锚点在行尾。
答案 1 :(得分:0)
请阅读perl split函数。
my $data = <STDIN>
my @values = split(' ', $data);
my $first = $values[0];
my $last = $values[1];
我希望这可以帮助