Как напечатать итерационное письмо в Perl - PullRequest
0 голосов
/ 01 октября 2018

Мне нужно немного подумать о том, как печатать, чтобы получить ожидаемый результат. Как я могу сделать автоматическую итерацию для буквы только для данных, которые у меня есть, например, i++, и как я могу сбросить значение i длякаждый HOME?

Ожидаемый результат:

RESIDENCE LIST
a) HOME 1   1. Albert Einstein
            2. Adriana
            3. Anna
   LOCATION USA
b) HOME 2   1. Blaine Pascal
            2. Caroline Herschel
            3. Cecilia Payne-Gaposchkin
   LOCATION GERMANY
c) HOME 3   1. Dorothy Hodgkin
            2. Edmond Halley
            3. Edwin Powell Hubble
   LOCATION INDIA 

use strict;
use warnings;

my i=1;
my @alphabets=("a".."z");
my @homes=qw(
HOME1
HOME2
HOME3
);
my @residences=qw(
HOME1 Albert Einstein
HOME1 Adriana
HOME1 Anna
HOME2 Blaine Pascal
HOME2 Caroline Herschel
HOME2 Cecilia Payne-Gaposchkin
HOME3 Dorothy Hodgkin
HOME3 Edmond Halley
HOME3 Edwin Powell Hubble
);
my @location=qw(
USA
GERMANY
INDIA
);

print  "RESIDENCE LIST \n\n";

foreach my $alphabet(@alphabets)
{
    print "$alphabet)";

    foreach my  $home(@homes) 
    {
        foreach my $location(@location)
        {
            foreach my $residence (@residences)
            {
            if ($home=~ /^residence(.*)/)
            {
            print "\thome\t";
            print $i++,")$1\n";     
            }
            }
        print "\t $location\n"; 
    }

}

Новый сценарий

foreach my  $home(@homes) 
{
   my $i=1;
   foreach my $location(@location)
   {
   foreach my $residence (@residences)
   {
       if ($home=~ /^residence(.*)/)
       {
       print $alphabet++."\n";
       print "\thome\t";
       print $i++,")$1\n";      
       }
       else
       {
       next:
       }
    }

    print "\t $location\n";
    } 
}

Результат, который я получаю

    a) HOME 1   1. Albert Einstein
    b) HOME 1   2. Adriana
    c) HOME 1   3. Anna
    d) LOCATION USA
    e) HOME 2   1. Blaine Pascal
    f) HOME 2   2. Caroline Herschel
    g) HOME 2   3. Cecilia Payne-Gaposchkin
    h) LOCATION GERMANY
    i) HOME 3   1. Dorothy Hodgkin
    j) HOME 3   2. Edmond Halley
    k) HOME 3   3. Edwin Powell Hubble
    l) LOCATION INDIA 

1 Ответ

0 голосов
/ 01 октября 2018

Вместо $alphabet инициализируйте его, как вы делаете с $i, но с a.Оператор Perls ++ знает, как работать с буквами:

my $alphabet = 'a';

...
    $alphabet++;

Вместо того, чтобы иметь $i как фактически глобальную переменную, объявите ее на один уровень цикла выше, где вы хотите ее сбросить:

...
foreach my $home (@homes) {
    my $i = 1;
    foreach my $location (@location) {
    ...
        $i++
    ....
    };
}

См. Также

наложение при автоматическом увеличении

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...