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:

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

così:

codice:
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:
codice:
#!/usr/bin/perl
non ci dovrebbe essere troppo bisogno.

Infine ti do un consiglio.
Aggiungi:

codice:
use strict;
use warnings;
al tuo codice.

Non può che fare un gran bene!