Thread View: pl.comp.lang.perl
12 messages
12 total messages
Started by piecia aka draco
Fri, 24 Feb 2012 11:50
Odpowiednik funkcji source z basha
Author: piecia aka draco
Date: Fri, 24 Feb 2012 11:50
Date: Fri, 24 Feb 2012 11:50
42 lines
911 bytes
911 bytes
Witam Jako że w perlu nie zadziała coś takiego: #v+ `bash -c "source plik"`; print $ENV{var}; #v- napisałem funkcję która po części realizuje wczytywanie zmiennych z plików do hasha: #v+ my %env; sub source_file { #{{{ my ($file) = @_; open my ($fh), q{<}, $file or croak "$!"; ENV: while (<$fh>) { chomp; my ($key, $value); unless ( ($key, $value) = m/\A\s*(\w+)\s*=\s*([^#]+)\z/xms ){ next ENV; } $value =~ s{\A"?([^"]+)"?\z}{$1}xms; $env{$key} = $value; } return ; } #v- Zmienne są wczytywane do hasha %env. Problem występuje gdy w pliku zmienna przyjmie np. postać: #v+ var=$pkgevr-$pkgrel var=${pkgver}.${pkgrel} #v- I inne kombinacje. Gdzie zmienna może być objęta przez {} lub nie. Pytanie jak się najlepiej do tego zabrać? -- piecia aka dracorp pisz na: piotr kropka rogoza at wp kropka eu
Re: Odpowiednik funkcji source z basha
Author: "Stachu 'Dozzie'
Date: Fri, 24 Feb 2012 11:59
Date: Fri, 24 Feb 2012 11:59
43 lines
968 bytes
968 bytes
On 2012-02-24, piecia aka dracorp <imie.nazwisko@wp.eu> wrote: > Witam > Jako �e w perlu nie zadzia�a co� takiego: > #v+ > `bash -c "source plik"`; > print $ENV{var}; > #v- > napisa�em funkcj� kt�ra po cz�ci realizuje wczytywanie zmiennych z > plik�w do hasha: * YAML/YAML::Syck * JSON * Text::CSV/Tie::Array::CSV > #v+ > my %env; > sub source_file { #{{{ > my ($file) = @_; [...] > $env{$key} = $value; > } > return ; > } > #v- Tak si� nie robi. Deklarujesz %env wewn�trz funkcji i zwracasz %env (albo referencj� do tego). > Zmienne s� wczytywane do hasha %env. Problem wyst�puje gdy w pliku > zmienna przyjmie np. posta�: > #v+ > var=$pkgevr-$pkgrel > var=${pkgver}.${pkgrel} > #v- > I inne kombinacje. Gdzie zmienna mo�e by� obj�ta przez {} lub nie. > Pytanie jak si� najlepiej do tego zabra�? Nie papra� samemu. Zale�y do czego tego potrzebujesz. -- Secunia non olet. Stanislaw Klekot
Re: Odpowiednik funkcji source z basha
Author: piecia aka draco
Date: Fri, 24 Feb 2012 12:10
Date: Fri, 24 Feb 2012 12:10
17 lines
517 bytes
517 bytes
Dnia Fri, 24 Feb 2012 11:59:06 +0000, Stachu 'Dozzie' K. napisał(a): > * YAML/YAML::Syck * JSON * Text::CSV/Tie::Array::CSV Zaraz sprawdzę. > Tak się nie robi. Deklarujesz %env wewnątrz funkcji i zwracasz %env > (albo referencję do tego). Czasem się zapomina o takich szczegółach. > Nie paprać samemu. Zależy do czego tego potrzebujesz. Jak najbardziej. Tylko czasem chciało by się aby nie uzależniać od dodatkowych modułów. -- piecia aka dracorp pisz na: piotr kropka rogoza at wp kropka eu
Re: Odpowiednik funkcji source z basha
Author: "Stachu 'Dozzie'
Date: Fri, 24 Feb 2012 12:19
Date: Fri, 24 Feb 2012 12:19
24 lines
812 bytes
812 bytes
On 2012-02-24, piecia aka dracorp <imie.nazwisko@wp.eu> wrote: > Dnia Fri, 24 Feb 2012 11:59:06 +0000, Stachu 'Dozzie' K. napisa�(a): > >> * YAML/YAML::Syck * JSON * Text::CSV/Tie::Array::CSV > Zaraz sprawdz�. > >> Tak si� nie robi. Deklarujesz %env wewn�trz funkcji i zwracasz %env >> (albo referencj� do tego). > Czasem si� zapomina o takich szczeg�ach. TO NIE JEST SZCZEGӣ. To jest podstawowa rzecz w programowaniu proceduralnym. >> Nie papra� samemu. Zale�y do czego tego potrzebujesz. > Jak najbardziej. Tylko czasem chcia�o by si� aby nie uzale�nia� od > dodatkowych modu��w. Akurat ty, patrz�c na tw�j kod i na to, jak pami�tasz o niekt�rych podstawowych sprawach, lepiej u�ywaj tak du�o modu��w, jak si� da. -- Secunia non olet. Stanislaw Klekot
Re: Odpowiednik funkcji source z basha
Author: piecia aka draco
Date: Fri, 24 Feb 2012 14:40
Date: Fri, 24 Feb 2012 14:40
90 lines
2476 bytes
2476 bytes
Dnia Fri, 24 Feb 2012 12:19:11 +0000, Stachu 'Dozzie' K. napisał(a): > TO NIE JEST SZCZEGÓŁ. To jest podstawowa rzecz w programowaniu > proceduralnym. Oj tam stachu się unosisz. Ja rozumiem, że ty jesteś nieomylny i tego samego oczekujesz od innych ale wyluzuj się. Odnośnie samego tematu. Głównie chodzi mi o wczytanie zmiennych i ich ewentualną ewaluację. Weźmy poniższy przykład: #v+ #!/usr/bin/env perl use strict; use warnings; open my ($fh), q{<}, 'PKGBUILD' or croak; my @env; my ($key, $value); while (<$fh>){ unless ( ($key, $value) = m/\A\s*(\w+)\s*=\s*([^#]+)\z/xms ){ next; } $value =~ s{\A"?([^"]+)"?\z}{$1}xms; chomp $value; { no strict 'refs'; $$key = $value; } push @env, $key; } foreach my $var (@env){ { no strict 'refs'; print "$var = $$var\n"; } } #v- Da dla przykładowego pliku PKGBUILD: http://aur.archlinux.org/packages/at/atftp/PKGBUILD taki wynik: #v+ pkgname = atftp _pkgver = 0.7 _patchver = 11 pkgver = ${_pkgver}.${_patchver} pkgrel = 1 pkgdesc = "a client/server implementation of the TFTP protocol that implements RFCs 1350, 2090, 2347, 2348, and 2349" arch = ('i686' 'x86_64') url = "http://freshmeat.net/projects/atftp/" license = ('GPL') depends = ('pcre' 'readline') makedepends = ('bash' 'gcc') conflicts = ('netkit-tftp') replaces = ('netkit-tftp') backup = ("etc/conf.d/atftpd") install = source = ("http://ftp.debian.org/debian/pool/main/a/atftp/atftp_ ${_pkgver}.dfsg.orig.tar.gz" md5sums = ('aa269044a6f992eca78fee2f6119643c' #v- czyli prawie dobrze. Teraz dobrze było by podstawić zmienne pod wartości innych zmiennych. Jednak dopisanie np. tego: #v+ { no strict 'refs'; if ( $value =~ m/\A\$/xms ){ $$key = eval "$value"; } else{ $$key = $value; } } #v- Nie rozwiązuje sprawy. Po uruchomieniu: #v+ Variable "$_pkgver" is not imported at (eval 1) line 1, <$fh> line 6. Variable "$_patchver" is not imported at (eval 1) line 2, <$fh> line 6. Can't use string ("pkgver") as a SCALAR ref while "strict refs" in use at ./test.pl line 17, <$fh> line 6 #v- W jaki sposób mogę ewaluować tylko zmienne, bez interpretacji wyrażeń arytmetycznych? Fakt że każdą wartość można traktować jako zbiór rekordów CSV i dopiero wtedy się do tego dobrać. Eval jako przykład więc Stachu się nie gorączkuj. -- Piecia
Re: Odpowiednik funkcji source z basha
Author: piecia aka draco
Date: Fri, 24 Feb 2012 14:59
Date: Fri, 24 Feb 2012 14:59
20 lines
272 bytes
272 bytes
No dobra jak na razie to działa: #v+ if ( $value =~ m/\A\$/xms ){ $value =~ s{ \$\{?([_a-zA-Z0-9]+)\}? }{ no strict 'refs'; if (defined $$1){ $$1; } else { ""; } }egx; } #v- -- Piecia
Re: Odpowiednik funkcji source z basha
Author: "Stachu 'Dozzie'
Date: Fri, 24 Feb 2012 15:04
Date: Fri, 24 Feb 2012 15:04
28 lines
648 bytes
648 bytes
On 2012-02-24, piecia aka dracorp <imie.nazwisko@wp.eu> wrote: > No dobra jak na razie to dzia�a: > #v+ > if ( $value =~ m/\A\$/xms ){ > $value =~ s{ > \$\{?([_a-zA-Z0-9]+)\}? > }{ > no strict 'refs'; > if (defined $$1){ > $$1; > } > else { > ""; > } > }egx; > } > #v- Zdajesz sobie spraw� z tego, �e tw�j kod jest paskudny, okropny i powinno si� za taki ucina� autorowi r�ce? Zabrali twojemu Perlowi %hasze, �e starannie unikasz ich u�ywania i zamiast tego pieprzysz si� z evalem i `no strict refs'? -- Secunia non olet. Stanislaw Klekot
Re: Odpowiednik funkcji source z basha
Author: piecia aka draco
Date: Fri, 24 Feb 2012 15:20
Date: Fri, 24 Feb 2012 15:20
13 lines
483 bytes
483 bytes
> Zdajesz sobie sprawę z tego, że twój kod jest paskudny, okropny i > powinno się za taki ucinać autorowi ręce? Oj wybacz że uraziłem twoje uczucia. Jak masz tasak to przyjeżdżaj i tnij panie ideał. > Zabrali twojemu Perlowi %hasze, że starannie unikasz ich używania i > zamiast tego pieprzysz się z evalem i `no strict refs'? To jest fragment, nie całość i to nie właściwego kodu. A po za tym wszystko w porządku? Jakieś zaburzenia osobowości? -- Piecia
Re: Odpowiednik funkcji source z basha
Author: "Stachu 'Dozzie'
Date: Fri, 24 Feb 2012 15:29
Date: Fri, 24 Feb 2012 15:29
27 lines
1130 bytes
1130 bytes
On 2012-02-24, piecia aka dracorp <imie.nazwisko@wp.eu> wrote: >> Zdajesz sobie spraw� z tego, �e tw�j kod jest paskudny, okropny i >> powinno si� za taki ucina� autorowi r�ce? > Oj wybacz �e urazi�em twoje uczucia. Jak masz tasak to przyje�d�aj i tnij > panie idea�. > >> Zabrali twojemu Perlowi %hasze, �e starannie unikasz ich u�ywania i >> zamiast tego pieprzysz si� z evalem i `no strict refs'? > To jest fragment, nie ca�o�� i to nie w�a�ciwego kodu. A po za tym > wszystko w porz�dku? Jakie� zaburzenia osobowo�ci? Widzisz, to przez takich jak ty Perl jest uwa�any za j�zyk ba�aganiarski. Nie umie taki jeden z drugim programowa� w Perlu, ale mimo to pisze w Perlu. I jeszcze nie rozumie, co zrobi� �le nawet gdy jest mu to wytkni�te. Ten tw�j "fragment" nale�a�oby przepisa� tak, �eby wygl�da� przyzwoicie, a nie jak psu z gard�a. Wtedy mo�na my�le� o poprawianiu tak, �eby dzia�a� jak oczekiwano. Przepraszam bardzo, ale nawet m�j kod z pocz�tk�w pracy z Perlem wygl�da� lepiej. -- Secunia non olet. Stanislaw Klekot
Re: Odpowiednik funkcji source z basha
Author: piecia aka draco
Date: Fri, 24 Feb 2012 16:58
Date: Fri, 24 Feb 2012 16:58
27 lines
1004 bytes
1004 bytes
Dnia Fri, 24 Feb 2012 15:29:56 +0000, Stachu 'Dozzie' K. napisał(a): > Widzisz, to przez takich jak ty Perl jest uważany za język > bałaganiarski. W ten sam sposób można mówić o każdym języku. A wiesz że Polacy kradną? > Nie umie taki jeden z drugim programować w Perlu, ale > mimo to pisze w Perlu. I jeszcze nie rozumie, co zrobił źle nawet gdy > jest mu to wytknięte. Jakoś nie przypominam sobie żebyś napisał jakąś książkę związaną z Perlem. A jakoś kolący cię w oko "no strict 'refs'" inni nie zabraniają stosować a do tego użyłem {}. > Przepraszam bardzo, ale nawet mój kod z początków pracy z Perlem > wyglądał lepiej. O wybacz kwintesencjo doskonałości, że zburzyłem twój porządek. Cieszę się że w życiu nie miałem jako nauczyciela kogoś takiego jak ty. Może masz wiedzę Stachu ale sposób w jaki ją przekazujesz innym ludziom jest żałosny. Z mojej strony EOT. -- piecia aka dracorp pisz na: piotr kropka rogoza at wp kropka eu
Re: Odpowiednik funkcji source z basha
Author: =?UTF-8?Q?SÅ=8
Date: Fri, 24 Feb 2012 18:06
Date: Fri, 24 Feb 2012 18:06
17 lines
495 bytes
495 bytes
Aha. piecia aka dracorp, kopsnij nam wyp�osza i znikamy. [...] > Da dla przyk�adowego pliku PKGBUILD: > http://aur.archlinux.org/packages/at/atftp/PKGBUILD Ale to znasz? http://search.cpan.org/~juster/WWW-AUR-0.14/lib/WWW/AUR/PKGBUILD.pm S�awek -- ________ _/ __/ __/ Od�� te wid�y ch�opcze! (ostatnie s�owa gracza RPG) \__ \__ \_______________________________________________________________ /___/___/ S�awomir Szczyrba steev/AT/hot\dot\pl
Re: Odpowiednik funkcji source z basha
Author: piecia aka draco
Date: Fri, 24 Feb 2012 19:29
Date: Fri, 24 Feb 2012 19:29
14 lines
269 bytes
269 bytes
Dnia Fri, 24 Feb 2012 18:06:28 +0100, Sławomir Szczyrba napisał(a): > Ale to znasz? > http://search.cpan.org/~juster/WWW-AUR-0.14/lib/WWW/AUR/PKGBUILD.pm Nie nie znam. Dzięki za informację. -- piecia aka dracorp pisz na: piotr kropka rogoza at wp kropka eu
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