Discussion:
MIME::Parser - Bareword "FH" not allowed while "strict subs"
(trop ancien pour répondre)
Eric BERTHOMIER
2012-09-26 08:49:51 UTC
Permalink
Bonjour à tous,

je tente de mettre en place ce script extrait de l'article des mongueurs de Perl :

http://articles.mongueurs.net/magazines/linuxmag61.html

#!/usr/bin/perl -w
use strict;
use Net::POP3;
use Net::SMTP;
use MIME::Parser;
use MIME::Entity;
use MIME::Lite;
use POSIX 'strftime';

my $pop = Net::POP3->new('pop.monfai.com')
or die "ne peut me connecter au serveur POP pop.monfai.com\n";
my $get = pop->get(1, FH) if $pop->login('lettre_mensuelle', 'secret') > 0;

die "le message n'est pas encore arrivé\n" unless $get;

$pop->delete(1) if $get;
$pop->quit();

my $parser = MIME::Parser->new();
my $entity = $parser->parse(\*FH);

my($body,$image_encoded);

for($entity->parts()) {
my $corps = $_->body();
my $head = $_->head()->as_string;

$body = join '', @$corps if $head =~ /content-type: text\/plain/is;
$image_encoded = join '', @$corps if $head =~ /content-type: image\//is;
}

Hélas je me retrouve bloqué avec le message d'erreur suivant :

Bareword "FH" not allowed while "strict subs" in use at bug.pl line 12.

J'ai donc tenté de passer avec un my $fh mais malgré plusieurs tentatives, je n'ai hélas pas réussi à trouver une solution fonctionnelle.

Merci d'avance de votre aide

Eric
Eric BERTHOMIER
2012-09-26 14:37:55 UTC
Permalink
Je complète ma question par une petite avancée, à la lecture de la description de MIME::Parser, il serait possible d'utiliser

use FileHandle;

my $fh = FileHandle->new;
Post by Eric BERTHOMIER
Bonjour à tous,
http://articles.mongueurs.net/magazines/linuxmag61.html
#!/usr/bin/perl -w
use strict;
use Net::POP3;
use Net::SMTP;
use MIME::Parser;
use MIME::Entity;
use MIME::Lite;
use POSIX 'strftime';
my $pop = Net::POP3->new('pop.monfai.com')
or die "ne peut me connecter au serveur POP pop.monfai.com\n";
my $get = pop->get(1, FH) if $pop->login('lettre_mensuelle', 'secret') > 0;
die "le message n'est pas encore arrivé\n" unless $get;
$pop->delete(1) if $get;
$pop->quit();
my $parser = MIME::Parser->new();
my $entity = $parser->parse(\*FH);
my($body,$image_encoded);
for($entity->parts()) {
my $corps = $_->body();
my $head = $_->head()->as_string;
}
Bareword "FH" not allowed while "strict subs" in use at bug.pl line 12.
J'ai donc tenté de passer avec un my $fh mais malgré plusieurs tentatives, je n'ai hélas pas réussi à trouver une solution fonctionnelle.
Merci d'avance de votre aide
Eric
Eric BERTHOMIER
2012-09-26 15:19:39 UTC
Permalink
Voici une solution qui ne me convient pas complètement mais qui semble fonctionner :

my $fh = new_tmpfile IO::File;

my $ref_courriel = $pop->get($msg, $fh);
my $parser = MIME::Parser->new();
my $entity = $parser->parse($fh);
Post by Eric BERTHOMIER
Je complète ma question par une petite avancée, à la lecture de la description de MIME::Parser, il serait possible d'utiliser
use FileHandle;
my $fh = FileHandle->new;
Post by Eric BERTHOMIER
Bonjour à tous,
http://articles.mongueurs.net/magazines/linuxmag61.html
#!/usr/bin/perl -w
use strict;
use Net::POP3;
use Net::SMTP;
use MIME::Parser;
use MIME::Entity;
use MIME::Lite;
use POSIX 'strftime';
my $pop = Net::POP3->new('pop.monfai.com')
or die "ne peut me connecter au serveur POP pop.monfai.com\n";
my $get = pop->get(1, FH) if $pop->login('lettre_mensuelle', 'secret') > 0;
die "le message n'est pas encore arrivé\n" unless $get;
$pop->delete(1) if $get;
$pop->quit();
my $parser = MIME::Parser->new();
my $entity = $parser->parse(\*FH);
my($body,$image_encoded);
for($entity->parts()) {
my $corps = $_->body();
my $head = $_->head()->as_string;
}
Bareword "FH" not allowed while "strict subs" in use at bug.pl line 12.
J'ai donc tenté de passer avec un my $fh mais malgré plusieurs tentatives, je n'ai hélas pas réussi à trouver une solution fonctionnelle.
Merci d'avance de votre aide
Eric
Loading...