Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Pavel Kurnosoff                      2:5030/736.25  28 Dec 2000  00:00:11
 To : All
 Subject : переменные
 -------------------------------------------------------------------------------- 
 
 ...в один прекрасный день обычный foreach меня достал своей убогостью. а
 именно, мне очень не хватало номера позиции и ее типа (первая, последняя,
 внутренняя) в блоке. ладно, пишем свой foreach:
 
 package ForLoop;
 use Exporter;
 use strict;
 use vars qw($pos $npos);
 
 @ForLoop::ISA=qw(Exporter); 
 @ForLoop::EXPORT=qw(forloop $pos $npos);
 
 sub forloop (&@) {
   my $code=shift;
   local $_;
 #  local($npos,$pos);
   for ($pos=0;$pos<scalar @_;$pos++) {
    if ($pos==0) {
       $npos='first';
    } elsif ($pos==scalar(@_)-1) {
       $npos='last';
    } else {
       $npos='inner';
    }
    $_=$_[$pos]; &$code; $_[$pos]=$_;
   }
 }
 1;
 
 пишем тест: 
 use ForLoop; forloop { printf "%02d: %-5s - $_\n", $pos, $npos; } (1..10);
 
 ...и все работает пока не включаю local $pos. тут же $pos и $npos в блоке
 становятся undef. а без local - плохо, ибо имена $pos и $npos нельзя назвать
 оригинальными и редкоиспользуемыми.
 
 насколько я понимаю, трабл в том, что Exporter создает в том месте, где я
 сказал use ForLoop ссылку на $pos и компилятор ее жестко прописывает в код, а
 при local реальный адрес переменной изменяется, но тот код об этом не
 знает. вопрос, как-нибудь это дело можно обойти?
 
 последнее средство - сделать $_->{value,pos,npos}, но не хотелось бы...
 
 ps: а на самом деле блок - это что? завуалированная процедура что-ли? 
 -- 
 // pavel kurnosoff 
 --- Gnus v5.6.45/XEmacs 21.1 - "Bryce Canyon"
  * Origin: there's no tomorrow (2:5030/736.25)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 переменные   Pavel Kurnosoff   28 Dec 2000 00:00:11 
 переменные   Andy Uskov   06 Jan 2001 05:21:58 
 Re: переменные   Pavel Kurnosoff   06 Jan 2001 18:03:44 
 переменные   Andy Uskov   07 Jan 2001 20:34:52 
 переменные   Andy Uskov   07 Jan 2001 21:05:14 
Архивное /ru.perl/3959aca6490e.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional