je débute en perl pour faire de petits scripts (pour Irssi) et j'ai un
soucis qui doit sembler ridicule.
j'envoit une chaine de caractères à une sub, laquelle doit prendre le
premier mot comme étant un nom de variable et le reste comme son contenu
(pour faire un fichier de variables).
Par exemple j'envoit "state currently awaiting" et je voudrais mettre
dans mon fichier: "state:currently awaiting"
J'essaye de faire:
sub xa_set() {
my ($key, $xavalue) = @_;
if(!(open xa_settings, ">$xa_confile")) {
&putlog("Unable to create file $xa_confile");
}
print xa_settings "$key:$xavalue";
close xa_settings;
}
Avec ça, je me retrouve avec "state currently
awaiting:Irssi::Irc::Server=HASH(0x8336ca0)" dans le fichier.
Quelqu'un saurait-il comment faire pour que $key contienne le 1er mot et
$xavalue le reste?
J'ai essayé aussi en faisant:
sub xa_set() {
my $key = shift(@_);
my $xavalue = @_;
...
}
qui me ressort: "state currently awaiting:2"
Merci d'avance
--
Aide informatique: http://help-info.forumactif.com
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.crazy-irc.net
je débute en perl pour faire de petits scripts (pour Irssi) et j'ai un soucis qui doit sembler ridicule.
j'envoit une chaine de caractères à une sub, laquelle doit prendre le premier mot comme étant un nom de variable et le reste comme son contenu (pour faire un fichier de variables).
Par exemple j'envoit "state currently awaiting" et je voudrais mettre dans mon fichier: "state:currently awaiting"
J'essaye de faire: sub xa_set() { my ($key, $xavalue) = @_; if(!(open xa_settings, ">$xa_confile")) { &putlog("Unable to create file $xa_confile"); } print xa_settings "$key:$xavalue"; close xa_settings; }
Avec ça, je me retrouve avec "state currently awaiting:Irssi::Irc::Server=HASH(0x8336ca0)" dans le fichier.
Quelqu'un saurait-il comment faire pour que $key contienne le 1er mot et $xavalue le reste?
J'ai essayé aussi en faisant: sub xa_set() { my $key = shift(@_); my $xavalue = @_; ... } qui me ressort: "state currently awaiting:2"
Merci d'avance
Salut sub xa_set() { my $key = shift; my @xavalue = @_; ... }
CrazyCat wrote:
Bonjour,
je débute en perl pour faire de petits scripts (pour Irssi) et j'ai un
soucis qui doit sembler ridicule.
j'envoit une chaine de caractères à une sub, laquelle doit prendre le
premier mot comme étant un nom de variable et le reste comme son contenu
(pour faire un fichier de variables).
Par exemple j'envoit "state currently awaiting" et je voudrais mettre
dans mon fichier: "state:currently awaiting"
J'essaye de faire:
sub xa_set() {
my ($key, $xavalue) = @_;
if(!(open xa_settings, ">$xa_confile")) {
&putlog("Unable to create file $xa_confile");
}
print xa_settings "$key:$xavalue";
close xa_settings;
}
Avec ça, je me retrouve avec "state currently
awaiting:Irssi::Irc::Server=HASH(0x8336ca0)" dans le fichier.
Quelqu'un saurait-il comment faire pour que $key contienne le 1er mot et
$xavalue le reste?
J'ai essayé aussi en faisant:
sub xa_set() {
my $key = shift(@_);
my $xavalue = @_;
...
}
qui me ressort: "state currently awaiting:2"
Merci d'avance
Salut
sub xa_set() {
my $key = shift;
my @xavalue = @_;
...
}
je débute en perl pour faire de petits scripts (pour Irssi) et j'ai un soucis qui doit sembler ridicule.
j'envoit une chaine de caractères à une sub, laquelle doit prendre le premier mot comme étant un nom de variable et le reste comme son contenu (pour faire un fichier de variables).
Par exemple j'envoit "state currently awaiting" et je voudrais mettre dans mon fichier: "state:currently awaiting"
J'essaye de faire: sub xa_set() { my ($key, $xavalue) = @_; if(!(open xa_settings, ">$xa_confile")) { &putlog("Unable to create file $xa_confile"); } print xa_settings "$key:$xavalue"; close xa_settings; }
Avec ça, je me retrouve avec "state currently awaiting:Irssi::Irc::Server=HASH(0x8336ca0)" dans le fichier.
Quelqu'un saurait-il comment faire pour que $key contienne le 1er mot et $xavalue le reste?
J'ai essayé aussi en faisant: sub xa_set() { my $key = shift(@_); my $xavalue = @_; ... } qui me ressort: "state currently awaiting:2"
Merci d'avance
Salut sub xa_set() { my $key = shift; my @xavalue = @_; ... }
Sébastien Bourgasser
j'envoit une chaine de caractères à une sub, laquelle doit prendre le premier mot comme étant un nom de variable et le reste comme son contenu (pour faire un fichier de variables).
Par exemple j'envoit "state currently awaiting" et je voudrais mettre dans mon fichier: "state:currently awaiting"
J'essaye de faire: sub xa_set() { my ($key, $xavalue) = @_; if(!(open xa_settings, ">$xa_confile")) { &putlog("Unable to create file $xa_confile"); } print xa_settings "$key:$xavalue"; close xa_settings; }
Bonjour,
Si vous n'envoyez qu'un argument, vous ne pourrez avoir qu'un argument. Il faudrait appeler xa_set() avec 2 arguments du style: xa_set('state', 'currently awaiting');
Toutefois pour n'utiliser qu'un seul argument, si son format est toujours identique, une regexp vous suffira;
sub xa_set() { my ($key, $xavalue) = shift =~ /^(S+) (.*)/
# open ... print xa_settings "$key:$xavalue"; }
A+
-- Séb
j'envoit une chaine de caractères à une sub, laquelle doit prendre le
premier mot comme étant un nom de variable et le reste comme son contenu
(pour faire un fichier de variables).
Par exemple j'envoit "state currently awaiting" et je voudrais mettre
dans mon fichier: "state:currently awaiting"
J'essaye de faire:
sub xa_set() {
my ($key, $xavalue) = @_;
if(!(open xa_settings, ">$xa_confile")) {
&putlog("Unable to create file $xa_confile");
}
print xa_settings "$key:$xavalue";
close xa_settings;
}
Bonjour,
Si vous n'envoyez qu'un argument, vous ne pourrez avoir qu'un argument.
Il faudrait appeler xa_set() avec 2 arguments du style:
xa_set('state', 'currently awaiting');
Toutefois pour n'utiliser qu'un seul argument, si son format est
toujours identique, une regexp vous suffira;
sub xa_set() {
my ($key, $xavalue) = shift =~ /^(S+) (.*)/
j'envoit une chaine de caractères à une sub, laquelle doit prendre le premier mot comme étant un nom de variable et le reste comme son contenu (pour faire un fichier de variables).
Par exemple j'envoit "state currently awaiting" et je voudrais mettre dans mon fichier: "state:currently awaiting"
J'essaye de faire: sub xa_set() { my ($key, $xavalue) = @_; if(!(open xa_settings, ">$xa_confile")) { &putlog("Unable to create file $xa_confile"); } print xa_settings "$key:$xavalue"; close xa_settings; }
Bonjour,
Si vous n'envoyez qu'un argument, vous ne pourrez avoir qu'un argument. Il faudrait appeler xa_set() avec 2 arguments du style: xa_set('state', 'currently awaiting');
Toutefois pour n'utiliser qu'un seul argument, si son format est toujours identique, une regexp vous suffira;
sub xa_set() { my ($key, $xavalue) = shift =~ /^(S+) (.*)/
# open ... print xa_settings "$key:$xavalue"; }
A+
-- Séb
Dam
Si tu appelles comme ça : xa_set("state currently awaiting");
sub xa_set($) { my $param = shift(@_); my $key = $param; $key =~ s/(w+)s+(.*)/$1/; my $xavalue = $2;
if(!(open xa_settings, ">$xa_confile")) { &putlog("Unable to create file $xa_confile"); } print xa_settings "$key:$xavalue"; close xa_settings; }
C'est correct?
Si tu appelles comme ça :
xa_set("state currently awaiting");
sub xa_set($) {
my $param = shift(@_);
my $key = $param;
$key =~ s/(w+)s+(.*)/$1/;
my $xavalue = $2;
if(!(open xa_settings, ">$xa_confile")) {
&putlog("Unable to create file $xa_confile");
}
print xa_settings "$key:$xavalue";
close xa_settings;
}
Si tu appelles comme ça : xa_set("state currently awaiting");
sub xa_set($) { my $param = shift(@_); my $key = $param; $key =~ s/(w+)s+(.*)/$1/; my $xavalue = $2;
if(!(open xa_settings, ">$xa_confile")) { &putlog("Unable to create file $xa_confile"); } print xa_settings "$key:$xavalue"; close xa_settings; }
C'est correct?
Dam
avec un appel avec 2 arguements xa_set('state', 'currently awaiting');
Tu peux aussi faire ça : sub xa_set($ $) { my $key = shift(@_); my $xavalue = shift(@_); if(!(open xa_settings, ">$xa_confile")) { &putlog("Unable to create file $xa_confile"); } print xa_settings "$key:$xavalue"; close xa_settings; }
avec un appel avec 2 arguements
xa_set('state', 'currently awaiting');
Tu peux aussi faire ça :
sub xa_set($ $) {
my $key = shift(@_);
my $xavalue = shift(@_);
if(!(open xa_settings, ">$xa_confile")) {
&putlog("Unable to create file $xa_confile");
}
print xa_settings "$key:$xavalue";
close xa_settings;
}
avec un appel avec 2 arguements xa_set('state', 'currently awaiting');
Tu peux aussi faire ça : sub xa_set($ $) { my $key = shift(@_); my $xavalue = shift(@_); if(!(open xa_settings, ">$xa_confile")) { &putlog("Unable to create file $xa_confile"); } print xa_settings "$key:$xavalue"; close xa_settings; }
Toutefois pour n'utiliser qu'un seul argument, si son format est toujours identique, une regexp vous suffira; sub xa_set() { my ($key, $xavalue) = shift =~ /^(S+) (.*)/
Effectivement, ça marche parfaitement. En fait, ma sub reçoit trois arguments mais je ne maitrise que le premier, donc je gère comme si je n'en avais qu'un.
J'avais bien tenté avec les regexp mais comme je ne maitrise pas perl, c'est vite devenu calamiteux. Heureusement, au fur et à mesure je prend mes marques.
Merci bien :)
-- Aide informatique: http://help-info.forumactif.com Humour: http://www.chatfou.com Tchattez en liberté: http://www.crazy-irc.net
Sébastien Bourgasser wrote:
Toutefois pour n'utiliser qu'un seul argument, si son format est
toujours identique, une regexp vous suffira;
sub xa_set() {
my ($key, $xavalue) = shift =~ /^(S+) (.*)/
Effectivement, ça marche parfaitement.
En fait, ma sub reçoit trois arguments mais je ne maitrise que le
premier, donc je gère comme si je n'en avais qu'un.
J'avais bien tenté avec les regexp mais comme je ne maitrise pas perl,
c'est vite devenu calamiteux.
Heureusement, au fur et à mesure je prend mes marques.
Merci bien :)
--
Aide informatique: http://help-info.forumactif.com
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.crazy-irc.net
Toutefois pour n'utiliser qu'un seul argument, si son format est toujours identique, une regexp vous suffira; sub xa_set() { my ($key, $xavalue) = shift =~ /^(S+) (.*)/
Effectivement, ça marche parfaitement. En fait, ma sub reçoit trois arguments mais je ne maitrise que le premier, donc je gère comme si je n'en avais qu'un.
J'avais bien tenté avec les regexp mais comme je ne maitrise pas perl, c'est vite devenu calamiteux. Heureusement, au fur et à mesure je prend mes marques.
Merci bien :)
-- Aide informatique: http://help-info.forumactif.com Humour: http://www.chatfou.com Tchattez en liberté: http://www.crazy-irc.net
Dam
lourd? Personnellement, j'ai tendance à l'éclater les instructions afin que ce soit le plus clair possible. C'est également bien plus maintenable qu'avec un truc du style : "my ($key, $xavalue) = shift =~ /^(S+) (.*)/ "
Enfin bon, chacun son style de programmation ;)
lourd? Personnellement, j'ai tendance à l'éclater les instructions
afin que ce soit le plus clair possible. C'est également bien plus
maintenable qu'avec un truc du style :
"my ($key, $xavalue) = shift =~ /^(S+) (.*)/ "
lourd? Personnellement, j'ai tendance à l'éclater les instructions afin que ce soit le plus clair possible. C'est également bien plus maintenable qu'avec un truc du style : "my ($key, $xavalue) = shift =~ /^(S+) (.*)/ "
Enfin bon, chacun son style de programmation ;)
CrazyCat
Désolé mais je ne teste pas, la solution de Sébastien m'allant parfaitement et étant, amha, plus simple. Par contre, je garde ton code sous la main à titre d'exemple de possibilités.
Merci bien
-- Aide informatique: http://help-info.forumactif.com Humour: http://www.chatfou.com Tchattez en liberté: http://www.crazy-irc.net
Désolé mais je ne teste pas, la solution de Sébastien m'allant
parfaitement et étant, amha, plus simple.
Par contre, je garde ton code sous la main à titre d'exemple de
possibilités.
Merci bien
--
Aide informatique: http://help-info.forumactif.com
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.crazy-irc.net
Désolé mais je ne teste pas, la solution de Sébastien m'allant parfaitement et étant, amha, plus simple. Par contre, je garde ton code sous la main à titre d'exemple de possibilités.
Merci bien
-- Aide informatique: http://help-info.forumactif.com Humour: http://www.chatfou.com Tchattez en liberté: http://www.crazy-irc.net
Sébastien Bourgasser
lourd? Personnellement, j'ai tendance à l'éclater les instructions afin que ce soit le plus clair possible. C'est également bien plus maintenable qu'avec un truc du style : "my ($key, $xavalue) = shift =~ /^(S+) (.*)/ "
Enfin bon, chacun son style de programmation ;)
Effectivement chacun son style. Maintenant on peut peut-être lancer le troll de la semaine. Perso je préfère 1 ligne très simple à comprendre (c'est la base) que 4 lignes. Niveau maintenance, ça me parait plus simple également :)
A+
-- Séb
lourd? Personnellement, j'ai tendance à l'éclater les instructions
afin que ce soit le plus clair possible. C'est également bien plus
maintenable qu'avec un truc du style :
"my ($key, $xavalue) = shift =~ /^(S+) (.*)/ "
Enfin bon, chacun son style de programmation ;)
Effectivement chacun son style. Maintenant on peut peut-être lancer le
troll de la semaine. Perso je préfère 1 ligne très simple à comprendre
(c'est la base) que 4 lignes. Niveau maintenance, ça me parait plus
simple également :)
lourd? Personnellement, j'ai tendance à l'éclater les instructions afin que ce soit le plus clair possible. C'est également bien plus maintenable qu'avec un truc du style : "my ($key, $xavalue) = shift =~ /^(S+) (.*)/ "
Enfin bon, chacun son style de programmation ;)
Effectivement chacun son style. Maintenant on peut peut-être lancer le troll de la semaine. Perso je préfère 1 ligne très simple à comprendre (c'est la base) que 4 lignes. Niveau maintenance, ça me parait plus simple également :)
A+
-- Séb
Paul Gaborit
À (at) 10 Jan 2006 06:55:47 -0800, "Dam" écrivait (wrote):
Si tu appelles comme ça : xa_set("state currently awaiting");
On peut aussi utiliser 'split' et son paramètre LIMIT (ici il faut utiliser 2) :
sub xa_set { my $str = shift; my ($key, $value) = split ' ', $str, 2;
# ... print "$key: $valuen";
}
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) 10 Jan 2006 06:55:47 -0800,
"Dam" <damien.guerin2@wanadoo.fr> écrivait (wrote):
Si tu appelles comme ça :
xa_set("state currently awaiting");
On peut aussi utiliser 'split' et son paramètre LIMIT (ici il faut
utiliser 2) :
sub xa_set {
my $str = shift;
my ($key, $value) = split ' ', $str, 2;
# ...
print "$key: $valuen";
}
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>