🚀 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 16:00
Magiczny parametr.
#51453
Author: KEyS
Date: Sat, 14 Sep 2013 16:00
34 lines
513 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.
#51454
Author: "Stachu 'Dozzie'
Date: Sat, 14 Sep 2013 15:52
13 lines
321 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.
#51456
Author: "Stachu 'Dozzie'
Date: Sun, 15 Sep 2013 22:22
62 lines
1307 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;       #$PAR
> }

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";
> }
>
> $_11;
>
>
> 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.
#51455
Author: KEyS
Date: Sun, 15 Sep 2013 23:37
49 lines
851 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;       #$PAR
}


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";
}

$_11;


Wywo³anie:

X;

powinno wypisaæ 1111, nie robi nic.

Re: Magiczny parametr.
#51457
Author: KEyS
Date: Mon, 16 Sep 2013 15:24
62 lines
1078 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;       #$PAR
> }
>
>
> 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";
> }
>
> $_11;
>
>
> 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;
   $_=$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