|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Maxim Yemelyanov 2:5020/400 17 Nov 2005 14:08:32 To : Andrey Chernomyrdin Subject : Re: вопрос про STDOUT -------------------------------------------------------------------------------- Приветствую! 17 ноября 2005 г. в 11:04:33 Вы стучались к All: AC> Вот хотелось-бы узнать такую вещь: AC> В подпрограмму (foo) передают некий скаляр, если это reference - то AC> считаем что это некий объект который поддерживает метод print и AC> с помощью этого метода выводим информацию, если это не reference - AC> то считаем что это имя файла который нужно открыть и выводить в AC> него информацию. AC> Теперь если я хочу вывести информацию на STDOUT я передаю foo( AC> *STDOUT ), но *STDOUT - это не reference 8-/ и у него нет метода print. AC> $ perl -e '$o = *STDOUT; print STDOUT ( "ref: <", ref( $o ), ">\n")' AC> ref: <> AC> $ perl -e '$o = *STDOUT; $o->print( "ref: <", ref( $o ), ">\n")' AC> Can't locate object method "print" via package "IO::Handle" at -e line 1. AC> Или я где-то в трех соснах заблудился, либо... сходу примерно так: use strict; use IO::Handle; sub foo { my $smth = shift; if (ref($smth) && $smth->can('print')) { $smth->print(@_); } else { open my $fh, '>>', $smth; print $fh @_; close $fh; } } my @to_print = qw(a text...); foo('bar.txt', @to_print); foo(IO::Handle->new_from_fd(fileno(STDOUT), 'w'), @to_print); -- Удачи! Максим Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru --- ifmail v.2.15dev5.3 * Origin: Enigma Soft (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/13126296174cd.html, оценка из 5, голосов 10
|