拆分后插入带有连接功能的冒号。 PERL
Inserting colon with join function after splitting. PERL
my $fruit;
my $quantity = <STDIN>;
my $results = split(/,|:/,$quantity);
foreach my $result(@results){
my ($fruit_name, $value) = split("=", @result);
if($fruit_name == "apple") {
$fruit = $value;
my $ratio = join(":", $fruit);
print "My ratio = $ratio";
}
}
我的输出是:我的比率 = 12
来自输入:apple=1,apple=2.
我想要的输出:
My ratio = 1:2.
感谢您的帮助。
也许这就是您想要做的
use strict;
use warnings;
use feature 'say';
chomp(my $quantity = <DATA>); # chomp removes newline from input
my @results = split /[,:]/, $quantity; # using [] to create a character class
my @nums;
foreach my $result (@results){
my ($fruit_name, $value) = split "=", $result;
if ($fruit_name eq "apple") { # have to use eq when comparing strings
push @nums, $value; # store value for later printing
}
}
say "My ratio = ", join ":", @nums;
__DATA__
apple=1,apple=2
输出:
My ratio = 1:2
您的代码存在这些错误。
- 变量
@result
应该是$result
。如果您启用了 use strict
,您就会知道这一点。
- 您在想要使用数值相等性测试
==
的地方使用了 =
赋值。由于您没有使用 use warnings
,因此您对此一无所知。此外,您应该对字符串使用 eq
。
- 您有一个变量
$value
,您将其移至 $fruit
,将其移至 $ratio
。这是令人困惑和毫无意义的。
- 您不能只对一个值使用
join
。然后它什么都不做,因为您至少需要 2 个值才能加入。
- 您的代码的输出是
My ratio = 1My ratio = 2
,而不是 My ratio = 12
。
作为简化代码的替代方法,您可以将 hashref 用于水果的 array。
use strict;
use warnings;
use feature 'say';
my($fruit,$item,$count);
for( split(',',<DATA>) ) {
($item,$count) = split('=',$_);
push @{$fruit->{$item}}, $count;
}
say "My ratio = " . join(':', @{$fruit->{apple}});
__DATA__
apple=1,apple=2
输出
My ratio = 1:2
my $fruit;
my $quantity = <STDIN>;
my $results = split(/,|:/,$quantity);
foreach my $result(@results){
my ($fruit_name, $value) = split("=", @result);
if($fruit_name == "apple") {
$fruit = $value;
my $ratio = join(":", $fruit);
print "My ratio = $ratio";
}
}
我的输出是:我的比率 = 12 来自输入:apple=1,apple=2.
我想要的输出:
My ratio = 1:2.
感谢您的帮助。
也许这就是您想要做的
use strict;
use warnings;
use feature 'say';
chomp(my $quantity = <DATA>); # chomp removes newline from input
my @results = split /[,:]/, $quantity; # using [] to create a character class
my @nums;
foreach my $result (@results){
my ($fruit_name, $value) = split "=", $result;
if ($fruit_name eq "apple") { # have to use eq when comparing strings
push @nums, $value; # store value for later printing
}
}
say "My ratio = ", join ":", @nums;
__DATA__
apple=1,apple=2
输出:
My ratio = 1:2
您的代码存在这些错误。
- 变量
@result
应该是$result
。如果您启用了use strict
,您就会知道这一点。 - 您在想要使用数值相等性测试
==
的地方使用了=
赋值。由于您没有使用use warnings
,因此您对此一无所知。此外,您应该对字符串使用eq
。 - 您有一个变量
$value
,您将其移至$fruit
,将其移至$ratio
。这是令人困惑和毫无意义的。 - 您不能只对一个值使用
join
。然后它什么都不做,因为您至少需要 2 个值才能加入。 - 您的代码的输出是
My ratio = 1My ratio = 2
,而不是My ratio = 12
。
作为简化代码的替代方法,您可以将 hashref 用于水果的 array。
use strict;
use warnings;
use feature 'say';
my($fruit,$item,$count);
for( split(',',<DATA>) ) {
($item,$count) = split('=',$_);
push @{$fruit->{$item}}, $count;
}
say "My ratio = " . join(':', @{$fruit->{apple}});
__DATA__
apple=1,apple=2
输出
My ratio = 1:2