zamiana wartosci na zmienna
Lukasz PUZON Brodowski - 21-10-2007 00:01
zamiana wartosci na zmienna
Witajcie Chcialbym zmienic wartosc podana w argumencie $ARGV[0] na nowa zmienna, np. jesli uzytkownik poda w argumencie jakis_argument, to chcialbym zamienic to na $jakis_argument i wyswietlic postawina wczesniej wartosc zmiennej $jakis_argument.
Z gory dzieki LPB
Twelve Hungry Mammoths - 21-10-2007 00:01
On Sat, 20 Oct 2007 09:46:16 +0200, Lukasz PUZON Brodowski <puzon@list.pl> wrote: > Chcialbym zmienic wartosc podana w argumencie $ARGV[0] na nowa zmienna, > np. > jesli uzytkownik poda w argumencie jakis_argument, to chcialbym zamienic > to > na $jakis_argument i wyswietlic postawina wczesniej wartosc zmiennej > $jakis_argument.
jezeli dobrze rozumiem, to chodzi Ci o konstrukcje w rodzaju ${$ARGV[0]}. przejrzyj perldoc perlreftut.
no i napisz, po co Ci taka kombinacja alpejska. moze to, co chcesz zrobic, da sie zrobic latwiej i bezpieczniej?
pzdr szeryf
-- Przemysław ,,Szeryf'' Kowalczyk :: http://szeryf.wordpress.com/
Lukasz PUZON Brodowski - 21-10-2007 00:01
"Twelve Hungry Mammoths" <someone@microsoft.com> napisał(a):
> > jezeli dobrze rozumiem, to chodzi Ci o konstrukcje w rodzaju ${$ARGV[0]}.
> > przejrzyj perldoc perlreftut. > > no i napisz, po co Ci taka kombinacja alpejska. moze to, co chcesz zrobic,
> > da sie zrobic latwiej i bezpieczniej?
Tak, dokladnie o to chodzilo. Zadzialalo idealnie. A potrzebne mi to, poniewaz mam zestaw zmiennych w postaci $nazwa_komputera='jego.ip';
$nazwa_komputera wprowadzam jako argument, wiec to co napisales przyda mi sie aby przyrownac to do odpowiedniej zmiennej i jej wartosci - przy okazji sprawdzajac czy $nazwa_komputera istnieje. Teoretycznie moznaby to wsadzic w tablice, ale nie mialbym wtedy "indexu" jakim jest nazwa zmiennej. Troche to zakrecone, wiec pewnie bedziesz mial lepszy pomysl :)
Jeszcze raz dzieki Puzon
Vava - 21-10-2007 00:01
> Tak, dokladnie o to chodzilo. Zadzialalo idealnie. A potrzebne mi to, > poniewaz mam zestaw zmiennych w postaci > $nazwa_komputera='jego.ip'; > > $nazwa_komputera wprowadzam jako argument, wiec to co napisales przyda mi > sie aby przyrownac to do odpowiedniej zmiennej i jej wartosci - przy > okazji > sprawdzajac czy $nazwa_komputera istnieje. Teoretycznie moznaby to > wsadzic > w tablice, ale nie mialbym wtedy "indexu" jakim jest nazwa zmiennej. > Troche > to zakrecone, wiec pewnie bedziesz mial lepszy pomysl :)
Rozumiem, że masz coś takiego:
#!/usr/bin/perl
$komp1='10.11.155.11'; $komp2='10.11.155.12'; $komp3='10.11.155.13';
print ${$ARGV[0]};
__END__
??
To lepszy będzie hasz ;-)
#!/usr/bin/perl
$komputery = ( komp1 => '10.11.155.11', komp2 => '10.11.155.12', komp3 => '10.11.155.13', );
print $komputery{$ARGV[0]};
__END__
A jeszcze lepiej listę trzymać na zewnątrz skryptu ;-)
Pozdrawiam -- Vava Wawrzyniec Żurowski Victoria vale, et ubique es, suaviter sternutas
Szymon =?iso-8859-2?Q?Sok=F3=B3?= - 21-10-2007 00:01
On Sat, 20 Oct 2007 18:12:09 +0200, Vava wrote:
> To lepszy będzie hasz ;-) Święta racja...
> $komputery = ( Tylko tu powinno być %komputery albo zamiast ( należało użyć { przy czym w tym drugim przypadku ta linia: > print $komputery{$ARGV[0]}; powinna wyglądać tak: print $komputery->{$ARGV[0]};
-- Szymon Sokół (SS316-RIPE) -- Network Manager B Computer Center, AGH - University of Science and Technology, Cracow, Poland O http://home.agh.edu.pl/szymon/ PGP key id: RSA: 0x2ABE016B, DSS: 0xF9289982 F Free speech includes the right not to listen, if not interested -- Heinlein H
Lukasz PUZON Brodowski - 23-10-2007 00:01
Szymon Sokół <szymon@bastard.operator.from.hell.pl> napisał(a): >> $komputery = ( > Tylko tu powinno być %komputery albo zamiast ( należało użyć { > przy czym w tym drugim przypadku ta linia: >> print $komputery{$ARGV[0]}; > powinna wyglądać tak: > print $komputery->{$ARGV[0]};
Jakie sa roznice pomiedzy obydwoma rozwiazaniami? tylko w skladni?
Szymon =?iso-8859-2?Q?Sok=F3=B3?= - 23-10-2007 00:01
On Mon, 22 Oct 2007 13:21:03 +0200, Lukasz PUZON Brodowski wrote:
> Szymon Sokół <szymon@bastard.operator.from.hell.pl> napisał(a): >>> $komputery = ( >> Tylko tu powinno być %komputery albo zamiast ( należało użyć { >> przy czym w tym drugim przypadku ta linia: >>> print $komputery{$ARGV[0]}; >> powinna wyglądać tak: >> print $komputery->{$ARGV[0]}; > > Jakie sa roznice pomiedzy obydwoma rozwiazaniami? tylko w skladni?
W pierwszym %komputery jest tablicą asocjacyjną (hashem), a w drugim $komputery jest zmienną skalarną, zawierającą referencję do tablicy asocjacyjnej. Różnice składniowe wynikają z tego. -- Szymon Sokół (SS316-RIPE) -- Network Manager B Computer Center, AGH - University of Science and Technology, Cracow, Poland O http://home.agh.edu.pl/szymon/ PGP key id: RSA: 0x2ABE016B, DSS: 0xF9289982 F Free speech includes the right not to listen, if not interested -- Heinlein H
Twelve Hungry Mammoths - 23-10-2007 00:01
On Mon, 22 Oct 2007 16:39:53 +0200, Szymon Sokół <szymon@bastard.operator.from.hell.pl> wrote: > >> Szymon Sokół <szymon@bastard.operator.from.hell.pl> napisał(a): >>>> $komputery = ( >>> Tylko tu powinno być %komputery albo zamiast ( należało użyć { >>> przy czym w tym drugim przypadku ta linia: >>>> print $komputery{$ARGV[0]}; >>> powinna wyglądać tak: >>> print $komputery->{$ARGV[0]}; >> >> Jakie sa roznice pomiedzy obydwoma rozwiazaniami? tylko w skladni? > > W pierwszym %komputery jest tablicą asocjacyjną (hashem), a w drugim > $komputery > jest zmienną skalarną, zawierającą referencję do tablicy asocjacyjnej. > Różnice > składniowe wynikają z tego.
no i przede wszystkim wersja z haszem jest latwiejsza do zrozumienia i oprogramowania. wersje z referencja nalezy stosowac tylko, gdy nie da sie inaczej.
pzdr szeryf
-- Przemysław ,,Szeryf'' Kowalczyk :: http://szeryf.wordpress.com/
lrem - 23-10-2007 00:01
W poście <op.t0lxr8uhhxnuv2@negative-361apc>, Twelve Hungry Mammoths nabazgrał: >>>>> print $komputery{$ARGV[0]}; >>>> powinna wyglądać tak: >>>> print $komputery->{$ARGV[0]}; >>> >>> Jakie sa roznice pomiedzy obydwoma rozwiazaniami? tylko w skladni? >> >> W pierwszym %komputery jest tablicą asocjacyjną (hashem), a w drugim >> $komputery >> jest zmienną skalarną, zawierającą referencję do tablicy asocjacyjnej. >> Różnice >> składniowe wynikają z tego. > > no i przede wszystkim wersja z haszem jest latwiejsza do zrozumienia i > oprogramowania. wersje z referencja nalezy stosowac tylko, gdy nie da sie > inaczej.
A kiedy się nie da? Mi się wydawało, że po prostu przekazywanie referencji jest szybsze. Są jakieś sytuacje wymuszające skalara?
Supersede: oczywiście miałem na myśli listy vs referencje do tablicy. Hashy się nie przekazuje.
-- Nie głosuj, bo jeszcze popsujesz cyrk na Wiejskiej! http://nieglosuj.pl/sukces.html
Szymon =?iso-8859-2?Q?Sok=F3=B3?= - 23-10-2007 00:01
On Mon, 22 Oct 2007 18:00:07 +0000 (UTC), lrem wrote:
> A kiedy się nie da? Mi się wydawało, że po prostu przekazywanie > referencji jest szybsze. Są jakieś sytuacje wymuszające skalara? > > Supersede: oczywiście miałem na myśli listy vs referencje do tablicy. > Hashy się nie przekazuje.
Zajrzyj do perldoc perlsub; poszukaj "Pass by Reference". -- Szymon Sokół (SS316-RIPE) -- Network Manager B Computer Center, AGH - University of Science and Technology, Cracow, Poland O http://home.agh.edu.pl/szymon/ PGP key id: RSA: 0x2ABE016B, DSS: 0xF9289982 F Free speech includes the right not to listen, if not interested -- Heinlein H
=?ISO-8859-2?Q?Zbigniew_Kempczy=F1ski?= - 24-10-2007 00:01
Użytkownik lrem napisał:
> Supersede: oczywiście miałem na myśli listy vs referencje do tablicy. > Hashy się nie przekazuje. ^^^^^^^^^^^^^^^^^^^^^^^^^
Sprawdź poniższy przykład.
#!/usr/bin/perl
use Data::Dumper;
sub fn { my %h = @_; print Dumper(\%h); }
my %hsh = ( a => 1, b => 2, c => 3, );
fn(%hsh);
-- ============================= Zbigniew Kempczyński http://it.marton.pl/wegorz/ =============================
lrem - 24-10-2007 00:02
W poście <ffka6e$qa2$1@nemesis.news.tpi.pl>, Zbigniew Kempczyński nabazgrał: >> Supersede: oczywiście miałem na myśli listy vs referencje do tablicy. >> Hashy się nie przekazuje. > ^^^^^^^^^^^^^^^^^^^^^^^^^ > > Sprawdź poniższy przykład. > > #!/usr/bin/perl > > use Data::Dumper; > > sub fn { > my %h = @_; > print Dumper(\%h); > } > > my %hsh = ( > a => 1, > b => 2, > c => 3, > ); > > fn(%hsh);
Ten hash jest przerabiany na listę, lista przekazywana, a potem przerabiana na hasha.
-- Nie głosuj, bo jeszcze popsujesz cyrk na Wiejskiej! http://nieglosuj.pl/sukces.html
=?ISO-8859-2?Q?Zbigniew_Kempczy=F1ski?= - 25-10-2007 00:03
Użytkownik lrem napisał:
>>>Supersede: oczywiście miałem na myśli listy vs referencje do tablicy. >>>Hashy się nie przekazuje.
> Ten hash jest przerabiany na listę, lista przekazywana, a potem > przerabiana na hasha.
Jednak możesz podać hasza jako argument funkcji. Wg mnie obala to Twoją tezę "haszy się nie przekazuje". To, że rozkłada się to na listę i składa ponownie ma tu drugorzędne znaczenie. Funkcjonalnie przekazanie hasza jako argumentu działa (fakt, lepiej przekazać referencję by uniknąć zbędnego kopiowania). -- ============================= Zbigniew Kempczyński http://it.marton.pl/wegorz/ =============================
lrem - 25-10-2007 00:03
W poście <ffmotj$kae$1@atlantis.news.tpi.pl>, Zbigniew Kempczyński nabazgrał: >> Ten hash jest przerabiany na listę, lista przekazywana, a potem >> przerabiana na hasha. > > Jednak możesz podać hasza jako argument funkcji. Wg mnie obala to Twoją > tezę "haszy się nie przekazuje". To, że rozkłada się to na listę > i składa ponownie ma tu drugorzędne znaczenie. Funkcjonalnie przekazanie > hasza jako argumentu działa (fakt, lepiej przekazać referencję by uniknąć > zbędnego kopiowania).
Ba, takiego hasha można nawet przekazać w jednym skalarze (join)! To dopiero obala wszystkie podobne tezy! :)
-- Erystyk z zamiłowania...
Vava - 25-10-2007 00:03
On Wed, 24 Oct 2007 10:41:28 +0200, lrem <lrem@localhost.localdomain> wrote:
> W poście <ffmotj$kae$1@atlantis.news.tpi.pl>, > Zbigniew Kempczyński nabazgrał: >>> Ten hash jest przerabiany na listę, lista przekazywana, a potem >>> przerabiana na hasha. >> >> Jednak możesz podać hasza jako argument funkcji. Wg mnie obala to Twoją >> tezę "haszy się nie przekazuje". To, że rozkłada się to na listę >> i składa ponownie ma tu drugorzędne znaczenie. Funkcjonalnie przekazanie >> hasza jako argumentu działa (fakt, lepiej przekazać referencję by >> uniknąć >> zbędnego kopiowania). > > Ba, takiego hasha można nawet przekazać w jednym skalarze (join)! To > dopiero obala wszystkie podobne tezy! :)
Ech... Ale przekazywanie referencji do hasza różni się od przekazywania samego hasza. Jak cały kod jest Twój własny, to pół biedy (choć ja po pół roku nigdy nie pamiętam, jak coś robiłem), ale jak robisz coś do spółki z kimś innym, czy korzystasz z czyjegoś modułu, to możesz się zdziwić, że Ci się nagle zmienia coś, co nie powinno ;-)
#!/usr/bin/perl
use strict; use Data::Dumper;
sub t1 { my %hash = @_; foreach my $k (keys %hash) { $hash{$k}++; } }
sub t2 { my $hash = shift; foreach my $k (keys %$hash) { $hash->{$k}++; } }
my %t = (a => 1, b => 2, c => 3);
t1(%t); print Dumper %t; t2(\%t); print Dumper %t; __END__
Pozdrawiam -- Vava Wawrzyniec Żurowski Victoria vale, et ubique es, suaviter sternutas
=?ISO-8859-2?Q?Zbigniew_Kempczy=F1ski?= - 25-10-2007 00:03
Użytkownik lrem napisał:
> Ba, takiego hasha można nawet przekazać w jednym skalarze (join)! To > dopiero obala wszystkie podobne tezy! :) >
Przy założeniu, że łączysz znakiem/łancuchem nie występującym w kluczach i wartościach. I takim sposobem przypomniał mi się dowcip, jak trzech żydów Żydów poszło do rabina w kwestii spornej. Pierwszy się wypowiedział - rabin twierdzi "masz rację", po czym wypowiedział się drugi - "i ty masz rację" stwierdził rabin. Trzeci - "ależ obaj nie mogą mieć racji". "I ty też masz rację" stwierdził rabin :)
-- ============================= Zbigniew Kempczyński http://it.marton.pl/wegorz/ =============================
moldovenu - 25-10-2007 00:03
Twelve Hungry Mammoths wrote:
> no i przede wszystkim wersja z haszem jest latwiejsza do zrozumienia i > oprogramowania. wersje z referencja nalezy stosowac tylko, gdy nie da > sie inaczej.
hehe, ja akurat mam odwrotne podejście - gdy zamiast hashy od razu użyję ref-hashy, przy tworzeniu dalszych, złożonych struktur kod się upraszcza jak, za przeproszeniem, w pythonie lub rubym ;)
nieco szerzej opisał to czas temu Steve http://steve.yegge.googlepages.com/a...languages-perl zwłaszcza kawałek od "Ot-Nay Oo-Tay Ight-Bray" ;)
Ale dla pojedyńczego hasha "w kontekście admina" to faktycznie bez znaczenia ;)
adam
lrem - 25-10-2007 00:03
W poście <op.t0o1ppfqsx85je@valis.domek>, Vava nabazgrał: >> Ba, takiego hasha można nawet przekazać w jednym skalarze (join)! To >> dopiero obala wszystkie podobne tezy! :) > > Ech... Ale przekazywanie referencji do hasza różni się od przekazywania > samego hasza. > Jak cały kod jest Twój własny, to pół biedy (choć ja po pół roku nigdy nie > pamiętam, jak coś robiłem), > ale jak robisz coś do spółki z kimś innym, czy korzystasz z czyjegoś > modułu, to możesz się zdziwić, że Ci się nagle zmienia coś, co nie powinno > ;-)
Decyzje o tym, czy ma się zmieniać, powinny zapadać jeszcze przed implementacją. Zaś samą implementację można popsuć na wiele więcej sposobów. Acz owszem, operowanie na kopii jest jakimś wyjściem ;)
Vava - 25-10-2007 00:03
On Wed, 24 Oct 2007 20:17:02 +0200, lrem <lrem@localhost.localdomain> wrote:
> W poście <op.t0o1ppfqsx85je@valis.domek>, > Vava nabazgrał: >>> Ba, takiego hasha można nawet przekazać w jednym skalarze (join)! To >>> dopiero obala wszystkie podobne tezy! :) >> >> Ech... Ale przekazywanie referencji do hasza różni się od przekazywania >> samego hasza. >> Jak cały kod jest Twój własny, to pół biedy (choć ja po pół roku nigdy >> nie >> pamiętam, jak coś robiłem), >> ale jak robisz coś do spółki z kimś innym, czy korzystasz z czyjegoś >> modułu, to możesz się zdziwić, że Ci się nagle zmienia coś, co nie >> powinno >> ;-) > > Decyzje o tym, czy ma się zmieniać, powinny zapadać jeszcze przed > implementacją. Zaś samą implementację można popsuć na wiele więcej > sposobów. Acz owszem, operowanie na kopii jest jakimś wyjściem ;)
No właśnie, ale jak pisałem, to możesz sobie zadecydować, jak sam piszesz program i jak pamiętasz, co napisana dwa lata temu procedura robi ;-) Gorzej jak praca jest w grupie, i to takiej, w której część programistów wpisało sobie w CV perfekcyjną znajmość Perla, która kończy się na helloworldware ;-)
Pozdrawiam -- Vava Wawrzyniec Żurowski Victoria vale, et ubique es, suaviter sternutas
lrem - 25-10-2007 00:03
W poście <op.t0p0clgvsx85je@valis.domek>, Vava nabazgrał: > No właśnie, ale jak pisałem, to możesz sobie zadecydować, jak sam piszesz > program i jak pamiętasz, co napisana dwa lata temu procedura robi ;-) > Gorzej jak praca jest w grupie, i to takiej, w której część programistów > wpisało sobie w CV perfekcyjną znajmość Perla, która kończy się na > helloworldware ;-)
Wprowadzać ewidentne suboptymalne rozwiązania w ramach walki z niekompetencją zespołu? Zdecydowanie nieprzyjemna perspektywa...
-- Sygnaturka zastepcza.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Zwracanie wartości, z funkcji, w funkcji [Js, Ajax]
Problem z wartościami w MySQL :( [ MySQL and ASP and VBScript ]
Insert do tabeli z danych innej tabeli plus dodatkowa wartośćpola (Firebird)
"Zmiennicy" - strona internetowa serialu =?ISO-8859-2?Q?Stanis=B3?==?ISO-8859-2?Q?awa_Barei?=
[MySql] Jak =?ISO-8859-2?Q?por=F3wna=E6_wynik_zapytania_ze?==?ISO-8859-2?Q?_zmienn=B1=3F?=
=?ISO-8859-2?Q?Tworzenie_zmiennych_w_bloku_przechwytywan?==?I SO-8859-2?Q?ia_wyj=B1tk=F3w_-_try?=
Ms SQL Server 2000 i błąd przy nie wypełnionej wartościo w polusmalldatetime
Jak wyswietlic dane z dwoch tabel gdy dla jednej z nich jest brak jest danej wartosci
[pgsql] Zmienna jako pole NEW w trigger pl/pgSQL.
[MySQL/PHP] Wyszukiwanie rekordu przez kolumnę wskazaną przez zmienną
zanotowane.pldoc.pisz.plpdf.pisz.pltejsza.htw.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|