PDA

Visualizza la versione completa : [perl] escape della ^


franke
07-03-2011, 19:02
salve avrei un problema devo mettere dei nickname e uno di questi ha la ^ iniziale e finale non riesco a farglela accettare il nick sta in mezzo a 2 '^nickname^',che comando devo usare???
tnx

franke
14-03-2011, 22:16
@admins = (
'_mRkZ_',
'franke',
'^giu^',
'REHAEL',
'IDDOSO'
); # Lista di tutti gli admin (Nicks)
il ^giu^ non lo vede negli admin

franke
14-03-2011, 22:19
if($text =~ /^\@Termina/i) {
if (grep {m|^$msgnick?$|} @admins) {
print $fd "QUIT \" WebList v1.0b\"\r\n";
die "Terminato da $msgnick\r\n";
} else { print $fd "PRIVMSG $chan 14Il nick9 $msgnick 14non è autorizzato ad impartire comandi!\r\n"; }
}

gianvituzzi
14-03-2011, 22:28
il codice lo devi mettere così:



#!/usr/bin/perl
...

franke
14-03-2011, 22:30
use warnings;
use IO::Socket;
use Net::FTP;
use LWP::Simple;
use DBI;

franke
14-03-2011, 22:32
#!/usr/bin/perl

franke
14-03-2011, 22:40
#!/usr/bin/perl

use warnings;
use IO::Socket;
use Net::FTP;
use LWP::Simple;
use DBI;

fork;

franke
14-03-2011, 23:02
#!/usr/bin/perl

use warnings;
use IO::Socket;
use Net::FTP;
use LWP::Simple;

saintex
18-03-2011, 17:39
ciao,
il problema è che:
^giu^
viene interpretato con i caratteri speciali delle espressioni regolari
(^ significa sia "non è", sia "la riga comincia con").

Basta spiegare al Perl, che i simboli all'interno dei nickname non sono caratteri speciali,
ma semplici letterali.

In pratica basta che sostituisci questa riga:



if (grep {m|^$msgnick?$|} @admins) {



così:



if (grep {m|^\Q$msgnick\E?$|} @admins) {


nota i simbolI: \Q \E da aggiungere nel tuo codice.
Questi simboli significano appunto che il testo incluso va interpretato come stringa letterale.

Così dovrebbe funzionare.

Di questo:


#!/usr/bin/perl

non ci dovrebbe essere troppo bisogno.

Infine ti do un consiglio.
Aggiungi:



use strict;
use warnings;


al tuo codice.

Non può che fare un gran bene! :)

franke
18-03-2011, 21:30
tnx 1000 funziona :malol:

Loading