Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2015-03-29 17:26:14

  winnetou - złodziej wirków ]:->

winnetou
złodziej wirków ]:->
Skąd: Jasło/Rzeszów kiedyś Gdańs
Zarejestrowany: 2008-03-31
Serwis

[PERL] Deep recursion on subroutine

Mam zgryza i to dość konkretnego. Napisałem sobie "moduł" do perla, niby zgodnie z zaleceniami itd itp jednak coś mi nie bangla.

moduł wygląda tak: http://wklej.tk/pnipny4wp/roz9nm
Skrypt testujący moduł wygląda tak: http://wklej.tk/pxuvlaz1n/8himm9/

I jest mały zonk bo jak odpale sobie test modułu to mam:

Kod:

root@s1:~/tmp# ./test_module.pl 
Deep recursion on subroutine "i18n::_concat" at /usr/share/perl/5.14/Carp.pm line 345.
Deep recursion on subroutine "Carp::trusts" at /usr/share/perl/5.14/Carp.pm line 284.
Deep recursion on subroutine "Carp::get_status" at /usr/share/perl/5.14/Carp.pm line 323.
Deep recursion on subroutine "Carp::trusts_directly" at /usr/share/perl/5.14/Carp.pm line 170.
Deep recursion on subroutine "Carp::trusts" at /usr/share/perl/5.14/Carp.pm line 285.
Deep recursion on subroutine "Carp::get_status" at /usr/share/perl/5.14/Carp.pm line 323.
Deep recursion on subroutine "Carp::trusts_directly" at /usr/share/perl/5.14/Carp.pm line 170.
Deep recursion on subroutine "Carp::get_status" at /usr/share/perl/5.14/Carp.pm line 330.
Deep recursion on subroutine "Carp::trusts_directly" at /usr/share/perl/5.14/Carp.pm line 170.

Jeśli z modułu z funkcji "BadAss()" usunę wywołanie

Kod:

notify($data);

to wtedy wszsytko bangla jak powinno....

Sama funkcja "notify()" jest poprawna bo korzystam z niej w innym skrypcie. Nie chce jej wywalać z "modułu" bo będzie wykorzystywana w innych skryptach a nie chce mi się jej za każdym razem przepisywać (w końcu po to są moduły i funkcje żeby je pisać raz a nie milion razy w każdym skrypcie)

Jeśli ktoś ma pomysła co i dlaczego jest zjebane będę bardzo zobowiązany. Próbowałem zamienić kolejnością funkcje BadAss() i notify() ale bez rezultatu...


LRU: #472938
napisz do mnie: ola@mojmail.eu
Hołmpejdż | Galerie | "Twórczość" || Free Image Hosting

Offline

 

#2  2015-03-29 18:21:45

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: [PERL] Deep recursion on subroutine

Pewnie $data przyjmuje różne dziwne wartości, które Perl traktuje poważnie, ja kiedyś musiałem dać:

my @vlcstart = ("$odtwarzacz  \"$adres\" 2>&1>/dev/null &" );

bo miałem podobne klocki ze zmienną, na szczęście nie w module, ino w skrypcie. ;)

Ostatnio edytowany przez Jacekalex (2015-03-29 18:24:42)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#3  2015-03-29 18:25:34

  winnetou - złodziej wirków ]:->

winnetou
złodziej wirków ]:->
Skąd: Jasło/Rzeszów kiedyś Gdańs
Zarejestrowany: 2008-03-31
Serwis

Re: [PERL] Deep recursion on subroutine

To nie to bo nawet jak zrobie wywołanie:
notify("dupa") to nie bangla

Buntuje się do samej funkcji notify i

Kod:

use MIME::Lite;
use MIME::Base64;
use Encode;

Natomiast jak wywale te use to nie bardzo chcą działać wywołania, np:

Kod:

MIME::Base64::encode_base64()

LRU: #472938
napisz do mnie: ola@mojmail.eu
Hołmpejdż | Galerie | "Twórczość" || Free Image Hosting

Offline

 

#4  2015-03-29 18:56:43

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: [PERL] Deep recursion on subroutine

A jak dasz "z drugiej strony"?


Kod:

sub notify{
    my ($body) = @_;
  my $msg = MIME::Lite->build(
            From            =>  'USER <user@example.com>',
      To        =>  'user@example.org',
      Subject   =>  '=?UTF-8?B?'.encode_base64(encode('utf8', 'BadAss Detected')).'?=',
      Type      =>  'TEXT',
      Encoding  =>  'quoted-printable',
      Data      =>  "$body",
   );
  $msg->attr("Content-type" => "text/plain");
  $msg->attr("content-type.charset" => "UTF-8");
  $msg->send('smtp', 'server.example.com', AuthUser=>'user@example.com', AuthPass=>'secretpass');
}

Bo wygląda na to, że chodzi o jakiś duperel.

Zapuść do skrypta:

Kod:

use diagnostics  -vebose;

Wtedy powie dokładniej, co go boli.

PS:

Kod:

      Subject   =>  '=?UTF-8?B?'.encode_base64(encode('utf8', 'BadAss Detected')).'?=',

To mi się przyda w innym skrypcie.  ;)

Ostatnio edytowany przez Jacekalex (2015-03-29 19:05:11)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#5  2015-03-29 19:14:16

  winnetou - złodziej wirków ]:->

winnetou
złodziej wirków ]:->
Skąd: Jasło/Rzeszów kiedyś Gdańs
Zarejestrowany: 2008-03-31
Serwis

Re: [PERL] Deep recursion on subroutine

z diagnostic:

Kod:

DESCRIPTION OF DIAGNOSTICS
    These messages are classified as follows (listed in increasing order of
    desperation):
    
        (W) A warning (optional).
        (D) A deprecation (enabled by default).
        (S) A severe warning (enabled by default).
        (F) A fatal error (trappable).
        (P) An internal error you should never see (trappable).
        (X) A very fatal error (nontrappable).
        (A) An alien error message (not generated by Perl).
    
    The majority of messages from the first three classifications above
    (W, D & S) can be controlled using the warnings pragma.
    
    If a message can be controlled by the warnings pragma, its warning
    category is included with the classification letter in the description
    below.
    
    Severe warnings are always enabled, unless they are explicitly disabled
    with the warnings pragma or the -X switch.
    
    Trappable errors may be trapped using the eval operator.  See
    "eval" in perlfunc.  In almost all cases, warnings may be selectively
    disabled or promoted to fatal errors using the warnings pragma.
    See warnings.
    

Deep recursion on subroutine "i18n::_concat" at /usr/share/perl/5.14/Carp.pm
    line 345 (#1)
    (W recursion) This subroutine has called itself (directly or indirectly)
    100 times more than it has returned.  This probably indicates an
    infinite recursion, unless you're writing strange benchmark programs, in
    which case it indicates something else.
    
    This threshold can be changed from 100, by recompiling the perl binary,
    setting the C pre-processor macro PERL_SUB_DEPTH_WARN to the desired value.
    
Deep recursion on subroutine "warnings::enabled" at
    /usr/local/share/perl/5.14.2/i18n.pm line 108 (#1)
Deep recursion on subroutine "warnings::__chk" at
    /usr/share/perl/5.14/warnings.pm line 394 (#1)
Deep recursion on subroutine "Carp::short_error_loc" at
    /usr/share/perl/5.14/warnings.pm line 389 (#1)
Deep recursion on subroutine "Carp::trusts" at /usr/share/perl/5.14/Carp.pm
    line 284 (#1)
Deep recursion on subroutine "Carp::get_status" at /usr/share/perl/5.14/Carp.pm
    line 323 (#1)
Deep recursion on subroutine "Carp::trusts_directly" at
    /usr/share/perl/5.14/Carp.pm line 170 (#1)
Deep recursion on subroutine "Carp::trusts" at /usr/share/perl/5.14/Carp.pm
    line 285 (#1)
Deep recursion on subroutine "Carp::get_status" at /usr/share/perl/5.14/Carp.pm
    line 330 (#1)

Bolą go  (tylko nie wiem dlaczego) encode_base64 i encode z cpanów MIME::Base64 i Encode i MIME::Lite...

Dobra najwyżej na razie wywalę powiadomienia mailowe i obejdę się bez tego w sumie to taki niekrytyczny ficzer.


LRU: #472938
napisz do mnie: ola@mojmail.eu
Hołmpejdż | Galerie | "Twórczość" || Free Image Hosting

Offline

 

#6  2015-03-29 20:07:36

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: [PERL] Deep recursion on subroutine

Kod:

while (<STDIN>)
{
    $mailbody = $_;
}

notify($mailbody);

sub notify{
    my ($body) = @_;
  my $msg = MIME::Lite->build(
      From      =>  "$mailfrom",
      To        =>  "$mailto",
      Subject   =>  '=?UTF-8?B?'.encode_base64(encode('utf8', 'BadAss Detected')).'?=',
      Type      =>  'TEXT',
      Encoding  =>  'quoted-printable',
      Data      =>  "$body",
   );
  $msg->attr("Content-type" => "text/plain");
  $msg->attr("content-type.charset" => "UTF-8");
#  $msg->send('smtp', "$serwer", AuthUser=>"$authuser", AuthPass=>"$authpass" , Port => 587);
#  $msg->send('sendmail');
   $msg->send("sendmail", "/usr/sbin/sendmail -t -i");
}

To wysyła grzecznie, ale źle koduje Subject, TB go wyświetla jako:

=?UTF-8?B?QmFkQXNzIERldGVjdGVk ?=

Do serwera SMTP nie umie się zalogować, bo tam bez TLS/SSL nie ma autoryzacji, a Mimie::Lite chyba nie potrafi po TLS wysyłać.

W Body tekst:

grzegżółka i różyczka na łączce

przeszedł poprawnie.


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#7  2015-03-29 20:33:19

  winnetou - złodziej wirków ]:->

winnetou
złodziej wirków ]:->
Skąd: Jasło/Rzeszów kiedyś Gdańs
Zarejestrowany: 2008-03-31
Serwis

Re: [PERL] Deep recursion on subroutine

my bad, zapomniałem o jednym "" ;)

Kod:

"=?UTF-8?B?".encode_base64(encode("utf8", 'BadAss Detected'),"")."?=",

Ale w moim przypadku to i tak nic nie zmienia dalej krzyczy o recursion ;]


LRU: #472938
napisz do mnie: ola@mojmail.eu
Hołmpejdż | Galerie | "Twórczość" || Free Image Hosting

Offline

 

#8  2015-03-29 23:53:04

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: [PERL] Deep recursion on subroutine

A u mnie, jak w skrypcie w zmiennej jest temat, to jest poprawny, a jak go czyta z ARGV = to wygląda tak:

Grzegżółka i Różyczka na łączce

Prawidłowo powinno być:

Grzegżółka i Różyczka na łączce

Poza tym NET-SMTP-TLS nie gada z Postfixem z powodu "self signed cert", po tym, jak mu przerobiłem zawartość, żeby akceptował TLSv12, a MIME:;LITE w ogóle z szyfrowanymi serwerami nie gada.

Poza tym wysyła maile jak burza przez sendmaila.
Aktualny rysopis:

Kod:

#!/usr/bin/perl -w


use warnings;
use strict;
use diagnostics -verbose;

use base qw(Exporter);
use utf8;
use MIME::Lite;
use MIME::Base64;
use Encode;
use Net::SMTP::TLS;  
use Net::SMTP::SSL;

my $serwer = "127.0.0.1";
my $authuser = "pacjent\@domena.tld";
my $authpass = "<hasełko>";
my $mailto = "adresat\@domena.tld";
my $mailfrom = "pacjent\@domena.tld";
my $mailbody = "";
my $subj = "Grzegżółka i Różyczka na łączce";
my $subj2 = $ARGV[0];
print "$subj2\n" if $subj2;

my $msg="";

local $/;
while (<STDIN>)
{
    $mailbody = $_;
};

notify($mailbody);

sub notify{
    my ($body) = @_;
  my $msg = MIME::Lite->build(
      From      =>  "$mailfrom",
      To        =>  "$mailto",
Subject =>   "=?UTF-8?B?".encode_base64(encode("utf8", "$subj2"),"")."?=", 
      Type      =>  'TEXT',
      Encoding  =>  'quoted-printable',
      Data      =>  "$body",
   );
  $msg->attr("Content-type" => "text/plain");
  $msg->attr("content-type.charset" => "UTF-8");
#  $msg->send('smtp', "$serwer", AuthUser=>"$authuser", AuthPass=>"$authpass" , Port => 587);
  $msg->send("sendmail", "/usr/sbin/sendmail -t -i");
}


my $mailer = new Net::SMTP::TLS(  
    '127.0.0.1',  
    Port    =>       '587',  
    User    =>      "$authuser",  
    Password=>      "$authpass",
    ssl_verify => 'none' );
$mailer->mail("$mailfrom");  
$mailer->to("$mailto");  
$mailer->data;  
$mailer->datasend($msg->as_string);  
$mailer->dataend;  
$mailer->quit;

Może się przyda.

U Ciebie funkcja data jest podobna, ino nie łapie zmiennej, która u mnie wchodzi z <STDIN> w dowolnej formie.

Sugerowałbym dokładnie sprawdzić wszystkie kropki, przecinki i spacje. ;)

Ostatnio edytowany przez Jacekalex (2015-03-30 02:20:06)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#9  2015-03-30 02:02:40

  winnetou - złodziej wirków ]:->

winnetou
złodziej wirków ]:->
Skąd: Jasło/Rzeszów kiedyś Gdańs
Zarejestrowany: 2008-03-31
Serwis

Re: [PERL] Deep recursion on subroutine

@Jacekalex - jak już wyżej pisałem - funkcja notify() jest ^C^V z innego skryptu w którym to działa i jest wykorzystywane na co dzień. Polskimi ogonkami też się nie martwię bo:

* wszsytko gada u mnie w UTF8
* nie używam w $data czy innych polskich ogonków.

Co do TLS to też nie problem bo akurat cert mam poprawny a nie self-signed. Poza tym buntuje się do modułu Carp/CGI::Carp w strace jedyne co wyczaiłem to (o ile pamiętam, jutro wrzucę całego) to "cannot use Carp because Carp depends on us".


LRU: #472938
napisz do mnie: ola@mojmail.eu
Hołmpejdż | Galerie | "Twórczość" || Free Image Hosting

Offline

 

#10  2015-03-30 02:15:17

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: [PERL] Deep recursion on subroutine

A możesz spróbować na aktualnym Perlu?

Bo jedziesz na 5.14, a aktualnie już jest

Kod:

dev-lang/perl-5.20.1-r4

Co oznacza, ze niektóre moduły regularnie aktualizowane mogą tracić kompatybilność z językiem.

Poza tym, jak się wywala na notify($data) to oznacza, ze coś dziwnego jest w tej zmiennej $data,
i być może trzeba ją potraktować jakąś specjalnie.
Czy to jest zmienna wieloliniowa?

Pytam, bo właśnie wysłałem przez mailperla cały dmesg, i doszedł w wiadomości dokładnie co do przecinka.
Jak obczaję, dlaczego rozsypuje się temat, kiedy jest wczytywany z ARGV, to spamrobot będzie gotowy. :D
Potem dorobimy mu jakiegoś GetOpta do zabawy.

Oczywiście kiedyś będzie częścią czegoś dużo większego, ale dopracowany skrypcik się przyda zawsze "na potem". xD

Pozdro
;-)

Ostatnio edytowany przez Jacekalex (2015-03-30 02:19:26)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#11  2015-03-30 09:05:16

  winnetou - złodziej wirków ]:->

winnetou
złodziej wirków ]:->
Skąd: Jasło/Rzeszów kiedyś Gdańs
Zarejestrowany: 2008-03-31
Serwis

Re: [PERL] Deep recursion on subroutine

Jacekalex napisał(-a):

Poza tym, jak się wywala na notify($data) to oznacza, ze coś dziwnego jest w tej zmiennej $data,
i być może trzeba ją potraktować jakąś specjalnie.
Czy to jest zmienna wieloliniowa?

ehh

winnetou napisał(-a):

bo nawet jak zrobie wywołanie:
notify("dupa") to nie bangla

Może się nie znam ale "dupa" to nie jest jakiś wielolinijkowy tekst ;]

A co do perla to w debianie wheezy nowszego nie ma. Aktualizacja do jessie/sid nie wchodzi w rachubę.

Poza tym (co wynikało niejako z poprzednich postów) nie dochodzi do wysłania maila

"moduł" wypierdala się w momencie wywołania funkcji
* encode_base64
* encode
oraz
* MIME::Lite->build

Nie pomaga zmiana

Kod:

use MIME::Base64

na

Kod:

use MIME::Base64 qw(encode_base64)

i analogicznie dla Encode i MIME::Lite.

Jeśli usunę inkludowanie modułów MIME::Lite, MIME::Base64 i Encode i odowłania  encode_base64 oraz encode zastąpię przez
MIME::Base64::encode_base64 i Encode::Encode to dalej jest kupa bo perl -c skrypt krzyczy "wywołanie nieznanej funkcji - może zapominałeś o module"


LRU: #472938
napisz do mnie: ola@mojmail.eu
Hołmpejdż | Galerie | "Twórczość" || Free Image Hosting

Offline

 

#12  2015-03-30 20:07:34

  winnetou - złodziej wirków ]:->

winnetou
złodziej wirków ]:->
Skąd: Jasło/Rzeszów kiedyś Gdańs
Zarejestrowany: 2008-03-31
Serwis

Re: [PERL] Deep recursion on subroutine

Ciekawostka:

Kod:

package Win::Notifier;
use strict;
use warnings;
use base qw(Exporter);
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
use i18n "/home/winnetou/perl/i18n";
use diagnostics  -verbose;
use utf8;

$VERSION     = 1.00;
@ISA         = qw(Exporter);
@EXPORT      = ();
@EXPORT_OK   = qw(viaSMS);
%EXPORT_TAGS = ( all => [qw(&viaSMS)],
               );

binmode STDOUT, ":utf8";

sub viaSMS{
  my ($user, $script, $msg) = @_;
  my $txt = "$user =>  $script => $msg";
  print "$txt";
  return 1;
}

1;

i test modułu:

Kod:

#!/usr/bin/perl

BEGIN { push @INC, '/home/winnetou/perl/modules' }
use strict;
use warnings;
use utf8;
use i18n "/home/winnetou/perl/i18n";
use DAP::Notifier qw(:all);
use diagnostics  -verbose;

my $user = "jakis_login";

print "Calling notify viaSMS\n";
viaSMS($user,$0,"no zjebał coś") or die "nope nope nope!";

Kod:

winnetou@myhost:~/tmp$ ./modtest2.pl 
Calling notify viaSMS
DESCRIPTION OF DIAGNOSTICS
    These messages are classified as follows (listed in increasing order of
    desperation):
    
        (W) A warning (optional).
        (D) A deprecation (enabled by default).
        (S) A severe warning (enabled by default).
        (F) A fatal error (trappable).
        (P) An internal error you should never see (trappable).
        (X) A very fatal error (nontrappable).
        (A) An alien error message (not generated by Perl).
    
    The majority of messages from the first three classifications above
    (W, D & S) can be controlled using the warnings pragma.
    
    If a message can be controlled by the warnings pragma, its warning
    category is included with the classification letter in the description
    below.
    
    Severe warnings are always enabled, unless they are explicitly disabled
    with the warnings pragma or the -X switch.
    
    Trappable errors may be trapped using the eval operator.  See
    "eval" in perlfunc.  In almost all cases, warnings may be selectively
    disabled or promoted to fatal errors using the warnings pragma.
    See warnings.
    

Deep recursion on subroutine "i18n::_concat" at /usr/share/perl/5.14/Carp.pm
    line 345 (#1)
    (W recursion) This subroutine has called itself (directly or indirectly)
    100 times more than it has returned.  This probably indicates an
    infinite recursion, unless you're writing strange benchmark programs, in
    which case it indicates something else.
    
    This threshold can be changed from 100, by recompiling the perl binary,
    setting the C pre-processor macro PERL_SUB_DEPTH_WARN to the desired value.
    
Deep recursion on subroutine "warnings::enabled" at
    /usr/local/share/perl/5.14.2/i18n.pm line 108 (#1)
Deep recursion on subroutine "warnings::__chk" at
    /usr/share/perl/5.14/warnings.pm line 394 (#1)
Deep recursion on subroutine "Carp::short_error_loc" at
    /usr/share/perl/5.14/warnings.pm line 389 (#1)
Deep recursion on subroutine "Carp::trusts" at /usr/share/perl/5.14/Carp.pm
    line 284 (#1)
Deep recursion on subroutine "Carp::get_status" at /usr/share/perl/5.14/Carp.pm
    line 323 (#1)
Deep recursion on subroutine "Carp::trusts_directly" at
    /usr/share/perl/5.14/Carp.pm line 170 (#1)
Deep recursion on subroutine "Carp::trusts" at /usr/share/perl/5.14/Carp.pm
    line 285 (#1)
Deep recursion on subroutine "Carp::get_status" at /usr/share/perl/5.14/Carp.pm
    line 330 (#1)
^C

ALE!.. Jak funkcja viaSMS będzie wyglądać tak:

Kod:

sub viaSMS{
  print "@_";
  return 1;
}

To wszystko wykona się prawidłowo! Czyli tak jakbym mu się nie podobała konkatenacja stringów...
nawet na takim czymś

Kod:

sub viaSMS{
  print "@_\n";
  return 1;
}

się wywala i musi być tak

Kod:

sub viaSMS{
  print "@_";
  print "\n";
  return 1;
}

Nadal nie rozumiem dlaczego buntuje się do modułów Carp... Spróbuję jeszcze przechwycić $SIG{__WARN__}  i $SIG{__DIE__}


LRU: #472938
napisz do mnie: ola@mojmail.eu
Hołmpejdż | Galerie | "Twórczość" || Free Image Hosting

Offline

 

#13  2015-03-30 20:22:15

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: [PERL] Deep recursion on subroutine

Na moje oko kilka errorow.

Kod:

Deep recursion on subroutine "warnings::enabled" at

Jak dasz

Kod:

# use warnings;

dalej jest ten error?

Może po prostu zajrzeć, co tam się dzieje w tych modułach, ja już przez 2 dni poprawiałem NEt::SMTP::TLS i zrobiłem drobną zmianę w MIME::Lite, także mnie już w tych modach nic nie zdziwi. :D

Ostatnio edytowany przez Jacekalex (2015-03-30 20:45:50)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#14  2015-03-30 20:43:32

  winnetou - złodziej wirków ]:->

winnetou
złodziej wirków ]:->
Skąd: Jasło/Rzeszów kiedyś Gdańs
Zarejestrowany: 2008-03-31
Serwis

Re: [PERL] Deep recursion on subroutine

Po wywaleniu "use warnings" i "use utf8" dalej tego samego... Skoro nie chce gadać przez moduł to zrobimy obejście (require)


LRU: #472938
napisz do mnie: ola@mojmail.eu
Hołmpejdż | Galerie | "Twórczość" || Free Image Hosting

Offline

 

#15  2015-03-30 20:46:00

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: [PERL] Deep recursion on subroutine

To chyba do Ciebie:

Kod:

package Carp;

{ use 5.006; }
use strict;
use warnings;
BEGIN {
    # Very old versions of warnings.pm load Carp.  This can go wrong due
    # to the circular dependency.  If warnings is invoked before Carp,
    # then warnings starts by loading Carp, then Carp (above) tries to
    # invoke warnings, and gets nothing because warnings is in the process
    # of loading and hasn't defined its import method yet.  If we were
    # only turning on warnings ("use warnings" above) this wouldn't be too
    # bad, because Carp would just gets the state of the -w switch and so
    # might not get some warnings that it wanted.  The real problem is
    # that we then want to turn off Unicode warnings, but "no warnings
    # 'utf8'" won't be effective if we're in this circular-dependency
    # situation.  So, if warnings.pm is an affected version, we turn
    # off all warnings ourselves by directly setting ${^WARNING_BITS}.
    # On unaffected versions, we turn off just Unicode warnings, via
    # the proper API.
    if(!defined($warnings::VERSION) || eval($warnings::VERSION) < 1.06) {
    ${^WARNING_BITS} = "";
    } else {
    "warnings"->unimport("utf8");
    }
}...

U mnie pliczek:

Kod:

/usr/lib64/perl5/5.20.1/Carp.pm

ma kilka podobnych ostrzeżeń.
Zobacz:

Kod:

#!/usr/bin/perl -w
use warnings;
my $dupa = $warnings::VERSION;
print $dupa;

wynik:

Kod:

 perl testwarn 
1.23

A u Ciebie?
Bo coś mi się zdaje, że ten Twój Perl jest troszkę za stary na takie zabawy.

W perlu szósta  wersja tamu nazad, to gruba przesada, kiedy już jest 5.20, to poniżej 5.16 sporo rzeczy zaczyna się sypać (i mają do tego pełne prawo). :D

W Gentusiu:

Kod:

[i] dev-lang/perl
     Available versions:  {M}5.18.2-r2(0/5.18){tbz2} 5.20.1-r4(0/5.20){tbz2} ~5.20.2(0/5.20) {berkdb debug doc gdbm ithreads}
     Installed versions:  5.20.1-r4{tbz2}(17:17:06 20.02.2015)(berkdb gdbm ithreads -debug -doc)

W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#16  2015-03-30 20:53:56

  winnetou - złodziej wirków ]:->

winnetou
złodziej wirków ]:->
Skąd: Jasło/Rzeszów kiedyś Gdańs
Zarejestrowany: 2008-03-31
Serwis

Re: [PERL] Deep recursion on subroutine

Ehh czepiasz się najpierw TLSa a potem wersji. Toć napisałem wyraźnie, że nie mam możliwości aktualizacji do nowszej wersji Debiana. Jak załatwisz w Debian Team żeby w 7.8 (do głównego repo a nie jakiś dziwnych backportów) wrzucili perla 5.20.x albo chociaż 5.18.x... Jakby była możliwość aktualizacji to zrobiłbym to w pierwszej kolejności...

Niestety jestem skazany na Debiana w takiej a nie innej wersji i do tego muszę się dostosować. Jakby się dało zainstalować na tej maszynie gentoo/*bsd to już by tam dawno stało.

Wracając do tematu

Kod:

require "/sciezka/do/skryptu.pl";

Obejście na razie działa więc skorzystam z tej opcji.


LRU: #472938
napisz do mnie: ola@mojmail.eu
Hołmpejdż | Galerie | "Twórczość" || Free Image Hosting

Offline

 

#17  2015-03-30 21:50:08

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: [PERL] Deep recursion on subroutine

Wytrzymasz te kilka miechów, aż stable będzie Jessie. ;)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)