🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.perl
5 messages
5 total messages Started by KEyS Sat, 14 Sep 2013 14:00
Magiczny parametr.
#52557
Author: KEyS
Date: Sat, 14 Sep 2013 14:00
34 lines
1295 bytes
Witam,
   mam problem "jak napisać procedurę obsługującą parametr magiczny?"

ma działać jak np. chomp:
    chomp    -> modyfikuje $_
    chomp($_) działa tak samo.

gdy zrobię:
    sub X($){
      my $S=shift;
      print $S
    }

i $_="Ala ma kota";

wywołanie:

X;

powinno wypisać "Ala ma kota".
     sub X(\$){
       my $S=shift;
       $$S='x';
     }
dla $_ j.w.

X;

print "$_" -> 'x'

pozdrawiam
   Eustachy Kruczała

PS. Może ktoś wie, jak nazwać ten problem ,żeby w GOOGLE znaleźć?
Re: Magiczny parametr.
#52558
Author: Stachu 'Dozzie' K.
Date: Sat, 14 Sep 2013 15:52
13 lines
1511 bytes
On 2013-09-14, KEyS <key_studio@wp.pl> wrote:
> Witam,
>    mam problem "jak napisać procedurę obsługującą parametr magiczny?"
>
> ma działać jak np. chomp:
>     chomp    -> modyfikuje $_
>     chomp($_) działa tak samo.

No i w czym masz w ogóle problem? $_ to zmienna globalna.

-- 
Secunia non olet.
Stanislaw Klekot
Re: Magiczny parametr.
#52559
Author: KEyS
Date: Sun, 15 Sep 2013 21:37
48 lines
1819 bytes
Użytkownik Stachu 'Dozzie' K. napisał:
> On 2013-09-14, KEyS <key_studio@wp.pl> wrote:
>> Witam,
>>     mam problem "jak napisać procedurę obsługującą parametr magiczny?"
>>
>> ma działać jak np. chomp:
>>      chomp    -> modyfikuje $_
>>      chomp($_) działa tak samo.
>
> No i w czym masz w ogóle problem? $_ to zmienna globalna.
>
i co z tego?

dla

sub S(\$){
   my $S=shift;  #ref($PAR)
   $$S=11;       #$PAR=11
}


Jak napisać funkcję zwracającą wynik przez parametr. W powyższym 
przykładzie próbowałem to zrobi przez prototyp (\$), ale kiedy nie podam 
parametru - program czepia się.

Wywołanie:

   X;

kończy się błędem.

Chcę żeby $_ po wywołaniu X miało wartość 11;

Przy funkcji nie prototypowanej (innej) też nie działa, np:

sub X{
   my $S=shift;
   print "$S\n";
}

$_=1111;


Wywołanie:

X;

powinno wypisać 1111, nie robi nic.
Re: Magiczny parametr.
#52560
Author: Stachu 'Dozzie' K.
Date: Sun, 15 Sep 2013 22:22
62 lines
2276 bytes
On 2013-09-15, KEyS <key_studio@wp.pl> wrote:
> Użytkownik Stachu 'Dozzie' K. napisał:
>> On 2013-09-14, KEyS <key_studio@wp.pl> wrote:
>>> Witam,
>>>     mam problem "jak napisać procedurę obsługującą parametr magiczny?"
>>>
>>> ma działać jak np. chomp:
>>>      chomp    -> modyfikuje $_
>>>      chomp($_) działa tak samo.
>>
>> No i w czym masz w ogóle problem? $_ to zmienna globalna.
>>
> i co z tego?

Ano to, że tej zmiennej używa się jak każdej innej.

> dla
>
> sub S(\$){
>    my $S=shift;  #ref($PAR)
>    $$S=11;       #$PAR=11
> }

Tak na boku: zdajesz sobie sprawę z tego, że $_[0] jest aliasem
parametru wywołania i można to wykorzystać?

> Jak napisać funkcję zwracającą wynik przez parametr. W powyższym 
> przykładzie próbowałem to zrobi przez prototyp (\$), ale kiedy nie podam 
> parametru - program czepia się.
>
> Wywołanie:
>
>    X;
>
> kończy się błędem.
>
> Chcę żeby $_ po wywołaniu X miało wartość 11;

No to czemu tej zmiennej nie ustawisz? Oczekujesz voodoo?

> Przy funkcji nie prototypowanej (innej) też nie działa, np:
>
> sub X{
>    my $S=shift;
>    print "$S\n";
> }
>
> $_=1111;
>
>
> Wywołanie:
>
> X;
>
> powinno wypisać 1111, nie robi nic.

No zgadza się (oprócz wypisania pustej linii). A używasz w ogóle w tej
funkcji $_?

-- 
Secunia non olet.
Stanislaw Klekot
Re: Magiczny parametr.
#52561
Author: KEyS
Date: Mon, 16 Sep 2013 13:24
60 lines
2107 bytes
Użytkownik KEyS napisał:
> Użytkownik Stachu 'Dozzie' K. napisał:
>> No i w czym masz w ogóle problem? $_ to zmienna globalna.
>>

> i co z tego?
>
> dla
>
> sub S(\$){
>    my $S=shift;  #ref($PAR)
>    $$S=11;       #$PAR=11
> }
>
>
> Jak napisać funkcję zwracającą wynik przez parametr. W powyższym
> przykładzie próbowałem to zrobi przez prototyp (\$), ale kiedy nie podam
> parametru - program czepia się.
>
> Wywołanie:
>
>    X;
>
> kończy się błędem.
>
> Chcę żeby $_ po wywołaniu X miało wartość 11;
>
> Przy funkcji nie prototypowanej (innej) też nie działa, np:
>
> sub X{
>    my $S=shift;
>    print "$S\n";
> }
>
> $_=1111;
>
>
> Wywołanie:
>
> X;
>
> powinno wypisać 1111, nie robi nic.
>
Ale się wygłupiłem ;)
Zapomniałem w ogóle o globalności - za bardzo się przejąłem unikaniem 
efektów ubocznych.

Dopiero, gdy w którejś procedurze "zlokalizowałem" $_ i uświadomiłem 
sobie, że przecież ona musi być local, żeby nie zmienić globalnie :).
Procedura ~j.w.

sub X{
   my $S=shift;
   my $GLOBAL=(!$S);
   $S=11;
   $_=$S if($GLOBAL);
   return $S;
}

Działa .
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads