2010-09-29 4 views
1

Я пишу сценарий Perl, который делает это:Есть ли лучший способ достичь этого с помощью Perl?

  1. Считывает значения переменных окружения a к z в петле.
  2. В зависимости от значения переменных окружения, формирует результат файл, похожий на

    a - 1,2,3,4 
    b - a,b,c 
    c - $234.34,$123.12 
    keyword1 %a% 
    keyword2 %b% 
    keyword3 %c% 
    

    Точка отметить, что все декларации должны прийти до использований.

  3. Проблема заключается в том, что, например, я прочитал a, и генерировать этот результата файл

    a - 1,2,3,4 
    keyword3 %c% 
    

    Теперь, когда я прочитал b, мне нужно результата файл, чтобы посмотреть, как это

    a - 1,2,3,4 
    b - a,b,c 
    keyword1 %a% 
    keyword2 %b% 
    

Как мне это сделать с помощью Perl?

Один из способов я могу думать о том, чтобы создать два различных файла - один с деклараций и других с использований, а затем объединить файлы в конце выполнения сценария.

Есть ли лучший способ?

+1

Какова была бы цель этого - как это полезно? Что является потребителем вывода этого скрипта? – Ether

+1

Можете ли вы добавить дополнительную информацию о том, что вы пытаетесь сделать? Не совсем понятно, какие действия вы хотите предпринять. Что делать, если переменная не установлена? Что вы хотите делать с любым из них в зависимости от настройки? – Daenyth

+0

@Ether: Этот отформатированный вывод, наконец, разбирается еще одним скриптом, который выполняет некоторую дальнейшую работу. – Lazer

ответ

5

Нет необходимости в отдельных файлах. Накопить декларации и использование в двух разных переменных массива, @declarations и @usages. После того, как вы прочитали все переменные среды и определить содержимое двух массивов, напечатать их:

say for @declarations; 
say for @usages; 

Вы могли бы даже быть в состоянии пропустить первый массив. Как только вы выясните, что должно быть в декларации, немедленно распечатайте его. Вам нужно только накапливать обычаи, пока не узнаете, что больше не будет деклараций.

+0

Спасибо @Rob, массивы - хороший выбор, и определенно лучше, чем создавать два отдельных файла и конкатенировать. – Lazer

+1

@Lazer: Я думаю, что это была точка всех комментаторов выше - какова цель вывода - зачем вообще выводить файлы? – Ether

+4

@ Еще один, по-видимому, сценарий Лазера генерирует код, который позже будет исполнен другим интерпретатором. Я не понимаю, почему так много сопротивляется идее создания Perl-скрипта, целью которого является создание файла. –

1
use strict; 
use warnings; 

my @keys = sort keys %ENV; 
print "$_ - $ENV{$_}\n" foreach @keys; 
my $kwcnt = 1; 
print "keyword${ \($kwcnt++) } \%$_\%\n" foreach @keys; 

Я сортирую ключи один раз и просматриваю их дважды.

Смежные вопросы