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


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

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

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

Оффлайн buggykey

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

Оффлайн andrew_bye

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 2698
    • Просмотр профиля
Код: (Perl) [Выделить]
#!/usr/bin/perl

use strict;
use warnings;

my $scalar = "один два три четыре пять";

my @array = split ' ', $scalar;

foreach (@array) { print "\n\"$_\"\n" }

Оффлайн buggykey

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

Оффлайн andrew_bye

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

Оффлайн buggykey

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

Оффлайн andrew_bye

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 2698
    • Просмотр профиля
А что мешает в вышеуказанном скрипте заменить
my $scalar = "один два три четыре пять";на
my $scalar = "    один    два           три четыре          пять        ";
Код: (Perl) [Выделить]
#!/usr/bin/perl

use strict;
use warnings;

my $scalar = "    один    два           три четыре          пять        ";
my @array = split ' ', $scalar;

print "\nscalar is \"$scalar\"\n";
print "\nall array elements are\n";

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) [Выделить]
use strict;
use warnings;

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

Оффлайн astrobeglec

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

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

Код: (Perl) [Выделить]
#!/usr/bin/perl
while (1) {
#Создаем случайные числа от 1 до 100
$asum = int(rand(100));
$bsum = int(rand(100));
#Выводим пример для ученика
print ("$asum + $bsum = ");
$it = $asum + $bsum;
#Запрашиваем ответ
$otv = <>;
#Проверяем результат
if ("$it" == "$otv")
{print("Верно!!!\n")}
else {print ("Неверно, правильный ответ $it\n")};
#Перезапускаем программу для вывода нового примера
};
Я вернулся...

Оффлайн buggykey

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

Оффлайн astrobeglec

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

 

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