Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Perl: как заставить qw интерполировать переменную в скобках?  (Прочитано 856 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн buggykey

  • Автор темы
  • Любитель
  • *
  • Сообщений: 88
    • Просмотр профиля
Здравствуйте все! :)
Начинаю учиться Perl'у.
По книжке.
Но примеры стараюсь брать не такие простые, как в книге, а по собственным необходимостям.
Может, я в книжке не дочитал еще, но мне надо переменную, значение которой состоит из слов:
$n = "один два три четыре пять 125 и_так_далее";
преобразовать в массив, значение каждого элемента которого состоит из одного слова из этой переменной, т. е. чтобы:
@array[0] = один;
@array[1] = два;
@array[2] = три;
и т. д.
Пробовал делать для этого:
@array = qw($n);
но, как известно, qw не подставляет значения в выражения в скобках, похожие на переменные.
Может кто подскажет, как это сделать - у меня не получилось составить поисковый запрос в Гугле, чтобы описать ситуацию :)
Спасибо! :)

Оффлайн andrew_bye

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 2698
    • Просмотр профиля
Код: Perl
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use warnings;
  5.  
  6. my $scalar = "один два три четыре пять";
  7.  
  8. my @array = split ' ', $scalar;
  9.  
  10. foreach (@array) { print "\n\"$_\"\n" }

Оффлайн buggykey

  • Автор темы
  • Любитель
  • *
  • Сообщений: 88
    • Просмотр профиля
Большое спасибо за четкий и красивый ответ!
Буду просвещаться дальше... :)

Оффлайн andrew_bye

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 2698
    • Просмотр профиля
Ну, спрашивай, если что...

Оффлайн buggykey

  • Автор темы
  • Любитель
  • *
  • Сообщений: 88
    • Просмотр профиля
Ну, коли так, спрошу! :)
А если переменная выглядит несколько иначе, чем:
my $scalar = "один два три четыре пять";а вот так:
my $scalar = "    один    два           три четыре          пять        ";а сделать надо то-же самое?
« Последнее редактирование: 23 Май 2013, 15:09:54 от buggykey »

Оффлайн andrew_bye

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 2698
    • Просмотр профиля
А что мешает в вышеуказанном скрипте заменить
my $scalar = "один два три четыре пять";на
my $scalar = "    один    два           три четыре          пять        ";
Код: Perl
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use warnings;
  5.  
  6. my $scalar = "    один    два           три четыре          пять        ";
  7. my @array = split ' ', $scalar;
  8.  
  9. print "\nscalar is \"$scalar\"\n";
  10. print "\nall array elements are\n";
  11.  
  12. foreach (@array) { print "\n\"$_\"\n" }

Оффлайн astrobeglec

  • Активист
  • *
  • Сообщений: 838
  • Самая тяжелая ноша - пророк в извращенном мире...
    • Просмотр профиля
Не я один перловку варю. Немного оффтопа:
(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 23 Май 2013, 23:01:41 от astrobeglec »
Я вернулся...

Оффлайн andrew_bye

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 2698
    • Просмотр профиля

Оффлайн astrobeglec

  • Активист
  • *
  • Сообщений: 838
  • Самая тяжелая ноша - пророк в извращенном мире...
    • Просмотр профиля
Уж0с. :o
А чего? Дошколиха... "Папа давай!", что первым в голову пришло то и написал... Где-то через 2 часа до неё стало доходить, что тут что-то не так... Примеры немного не кончались...
Я вернулся...

Оффлайн andrew_bye

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 2698
    • Просмотр профиля
Во-первых, если скрипт хоть чуточку сложнее "Hello world", то его, во избежание гемора с отловом ошибок, нужно начинать с
Код: Perl
  1. use strict;
  2. use warnings;

Во-вторых,
Код: Perl
  1. #Перезапускаем программу для вывода нового примера
  2. exec '[путь к скрипту]'
это верх "гениальности", поскольку для таких вещей вообще-то предусмотрены функции.

Оффлайн astrobeglec

  • Активист
  • *
  • Сообщений: 838
  • Самая тяжелая ноша - пророк в извращенном мире...
    • Просмотр профиля
andrew_bye, цель должна определять средства...

Хотя нафига функции?

Код: Perl
  1. #!/usr/bin/perl
  2. while (1) {
  3. #Создаем случайные числа от 1 до 100
  4. $asum = int(rand(100));
  5. $bsum = int(rand(100));
  6. #Выводим пример для ученика
  7. print ("$asum + $bsum = ");
  8. $it = $asum + $bsum;
  9. #Запрашиваем ответ
  10. $otv = <>;
  11. #Проверяем результат
  12. if ("$it" == "$otv")
  13.         {print("Верно!!!\n")}
  14. else    {print ("Неверно, правильный ответ $it\n")};
  15. #Перезапускаем программу для вывода нового примера
  16. };
  17.  
Я вернулся...

Оффлайн buggykey

  • Автор темы
  • Любитель
  • *
  • Сообщений: 88
    • Просмотр профиля
Блин! Я, вроде, задал простой вопрос, а тут такие дискуссии разгорелись...  ;D
Но большое спасибо всем за участие и за то, что не пинали ногами за дурацкие вопросы ;)

Оффлайн astrobeglec

  • Активист
  • *
  • Сообщений: 838
  • Самая тяжелая ноша - пророк в извращенном мире...
    • Просмотр профиля
Блин! Я, вроде, задал простой вопрос, а тут такие дискуссии разгорелись...  ;D
Но большое спасибо всем за участие и за то, что не пинали ногами за дурацкие вопросы ;)
KISS
Я вернулся...

 

Страница сгенерирована за 0.127 секунд. Запросов: 25.