Perl-按客户端循环计数

Perl-按客户端循环计数,perl,Perl,我有以下子项,将计算每个客户的购买数量。它过去只有/总是4个类别,下面的脚本就足够了 客户名单: 阿尔法01 阿尔法02 阿尔法03 阿尔法04 布拉沃01 布拉沃02 布拉沃03 布拉沃04 由于列表已增长到>4,我需要帮助修改脚本。 我希望脚本是灵活的。与将“MYClientNo”固定为某个数字/值不同,脚本可以继续在循环中运行,直到找到最后一个/最大的可用数字(只是一个想法),然后只有它才会停止并返回该值 例如,“alpha”可以上升到06,“bravo”可以上升到22。但我预计它不会

我有以下子项,将计算每个客户的购买数量。它过去只有/总是4个类别,下面的脚本就足够了

客户名单:

  • 阿尔法01
  • 阿尔法02
  • 阿尔法03
  • 阿尔法04
  • 布拉沃01
  • 布拉沃02
  • 布拉沃03
  • 布拉沃04
由于列表已增长到>4,我需要帮助修改脚本。 我希望脚本是灵活的。与将“MYClientNo”固定为某个数字/值不同,脚本可以继续在循环中运行,直到找到最后一个/最大的可用数字(只是一个想法),然后只有它才会停止并返回该值

例如,“alpha”可以上升到06,“bravo”可以上升到22。但我预计它不会很快超过100。有人能帮忙吗

sub GetCountMyClient {
    my @Line1 = @_;
    my @Count = (0, 0, 0, 0);
    foreach $myclient (@Line1) {
        my @MYClient       = split(/\s+/, $myclient);
        my @MYClientOutput = split(/:/, $MYClient[4]);
        #print $MYClientOutput[0]. "\n";
        my $MYClientNo     = substr($MYClientOutput[0], -2);
        #print $MYClientNo . "\n";
        if($MYClientNo eq "01") {
            $Count[0]+= 1;
        } elsif($MYClientNo eq "02") {
            $Count[1]+= 1;
        } elsif($MYClientNo eq "03") {
            $Count[2]+= 1;
        } elsif($MYClientNo eq "04") {
            $Count[3]+= 1;
        }
    }
    return @Count;
}
PS:我尽力识别代码,它在文本框中看起来是正确的,但在预览中却不正确

使用散列(
%count
),其中散列键是客户端编号,散列值是计数。或者,您可以使用带有客户机编号的数组作为数组索引

sub GetCountMyClient {
    my @Line1 = @_;
    my %count;

    foreach $myclient (@Line1) {
        my @MYClient       = split(/\s+/, $myclient);
        my @MYClientOutput = split(/:/, $MYClient[4]);
        #print $MYClientOutput[0]. "\n";
        my $MYClientNo     = substr($MYClientOutput[0], -2);
        #print $MYClientNo . "\n";
        $count{$MYClientNo}++;
    }
    return %count;
}
使用散列(
%count
),其中散列键是客户端编号,散列值是计数。或者,您可以使用带有客户机编号的数组作为数组索引

sub GetCountMyClient {
    my @Line1 = @_;
    my %count;

    foreach $myclient (@Line1) {
        my @MYClient       = split(/\s+/, $myclient);
        my @MYClientOutput = split(/:/, $MYClient[4]);
        #print $MYClientOutput[0]. "\n";
        my $MYClientNo     = substr($MYClientOutput[0], -2);
        #print $MYClientNo . "\n";
        $count{$MYClientNo}++;
    }
    return %count;
}

您可以在这里找到帮助您的
countby

use List::UtilsBy qw( count_by );

my %count = count_by { $_ =~ m/(\d+)$/ } @client_names;

假定
@client\u names
数组只包含客户端的名称,这将返回一个哈希值,给出每种数字字符串的结束数。

您可以在这里找到
count\u by
帮助

use List::UtilsBy qw( count_by );

my %count = count_by { $_ =~ m/(\d+)$/ } @client_names;
假定
@client\u names
数组只包含客户端的名称,这将返回一个哈希,给出每种数字字符串的结束数