Вопрос № 48211: Доброе время!
Есть ли на Perl'е тип данных "запись", и как он реализуется, если он есть?
Копался в текстах модулей и нашёл запись вида: $drh->{Name}. Что она означает в плане синтаксиса?...Вопрос № 48272: Здравствуйте, вот написал типа программку... но что-то она не работает, не подскажите-ли вы мне где я допустил ошибку,
Заранее всех благодарю....
Вопрос № 48.211
Доброе время!
Есть ли на Perl'е тип данных "запись", и как он реализуется, если он есть?
Копался в текстах модулей и нашёл запись вида: $drh->{Name}. Что она означает в плане синтаксиса?
Отвечает: -OC-
Здравствуйте, PaveL SvetlY!
такого типа данных как "запись в Perl не существует, но вместо этого можете использовать хэши. В вашем случа можно либо так:
%myrecord = (
id => 0,
host => 'hostname',
ip => 192.168.0.1
);
обращаться через $myrecord{id}или $myrecord{ip} и т.п.
Либо второй вариант использовать ссылку на анонимный хэш:
$myrecord = {
id => 0,
host => 'hostname',
ip => 192.168.0.1
};
обращаться через $myrecord->{id} и т.п.
Я бы ркомендовал использовать второй вариант.
Более подробнее можете прочитать в документации либо в литературе либо спросите лично
ну и ответ на второй вопрос надеюсь стал понятен.
Ответ отправил: -OC- (статус: Студент)
Ответ отправлен: 05.07.2006, 11:26 Оценка за ответ: 5 Комментарий оценки: Ещё, конечно, было бы неплохо ссылку на литературу, ну да ладно %) Почитал документацию на www.perl.com... написано хорошо и много, но в виду англоязычности не всё понятно.
Вопрос № 48.272
Здравствуйте, вот написал типа программку... но что-то она не работает, не подскажите-ли вы мне где я допустил ошибку,
Заранее всех благодарю.
Приложение:
Отправлен: 05.07.2006, 20:04
Вопрос задал: Lperw (статус: 1-ый класс)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Muad Dib
Здравствуйте, Lperw!
#!/usr/bin/perl -w
print qq[Привет, как вас зовут?
];
$name = ; chomp $name;
$answer="y";
while ($answer =~ "y") { # -->>> для сравнения строк == не используется!!!!
print qq[$name, угадай число от 0 до 5.
];
$rand_num = int(rand 5);
$user_num = ; chomp $user_num;
if ($user_num != $rand_num) {
print qq[Ответ не верный.
]
}
else {print qq[Поздравляю $name, вы угадали!!!];}
print "Хотите повторить? (y/n)
";
$answer = ; chomp $answer;
}
Ответ отправил: Muad Dib (статус: Студент)
Ответ отправлен: 05.07.2006, 21:47
Отвечает: -OC-
Здравствуйте, Lperw!
ошибка у вас здесь :
while ($answer == "y") {
для сравнения строк используется операторы (в скобках их эквиваленты для числовых переменных)
eq ( == )
ne (!= )
lt (<)
gt (>)
le (<=)
ge (>=)
возможен вариант использования поиска по шаблону , как была написано в предидущем ответе ( кстати не правильно и синтаксически и логически )
примерно так :
while ($answer =~ /^y$/) {
или
while ($answer =~ m/^y$/) {
синтаксическая ошибка - не указан опреатор поиска - //( m//)
логическая ошибка - совпадение будет в любом слове в котором будет содежаться буква "y". Т.е. если пользователь введет любое сочетание букв в котором окажется и "y", то это будет считаться как утвердительный ответ.(ну это в двух словах). В указаном мной примере будет осуществляться поиск только единственной буквы "y" и ничего больше, т.е. при вводе только одной буквы у ответ будет утвердительным.
Ответ отправил: -OC- (статус: Студент)
Ответ отправлен: 06.07.2006, 18:40 Оценка за ответ: 5