Thread View: pl.comp.lang.perl
5 messages
5 total messages
Started by KEyS
Sat, 14 Sep 2013 14:00
Magiczny parametr.
Author: KEyS
Date: Sat, 14 Sep 2013 14:00
Date: Sat, 14 Sep 2013 14:00
34 lines
1295 bytes
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.
Author: Stachu 'Dozzie' K.
Date: Sat, 14 Sep 2013 15:52
Date: Sat, 14 Sep 2013 15:52
13 lines
1511 bytes
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.
Author: KEyS
Date: Sun, 15 Sep 2013 21:37
Date: Sun, 15 Sep 2013 21:37
48 lines
1819 bytes
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.
Author: Stachu 'Dozzie' K.
Date: Sun, 15 Sep 2013 22:22
Date: Sun, 15 Sep 2013 22:22
62 lines
2276 bytes
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.
Author: KEyS
Date: Mon, 16 Sep 2013 13:24
Date: Mon, 16 Sep 2013 13:24
60 lines
2107 bytes
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