Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

matching con array

3 views
Skip to first unread message

liftman

unread,
Apr 4, 2015, 11:49:20 AM4/4/15
to
sicuramente mi perdo in un bicchiere d'acqua, ma...
Vediamo se riesco a spiegarmi:

ho un array:
@array = qw(pinco, pallino, tizio, caio);

se eseguo :print @array; #ottengo pincopallinotiziocaio
se però faccio una cosa tipo questa:
if (@array=~ /tizio/) {
print "ho trovato tizio \r\n";
}

non ottengo niente perchè in questo caso @array mi ritorna solo il numero
degli elementi, quindi se modifico così:
if (@array=~ /4/) {
print "ho trovato 4 elementi \r\n";
}

conferma il mio sospetto.
La mia domanda da pivello è pure semplice.... se

print @array;

mi ritorna una stringa con tutti gli elementi uno dopo l'altro, perchè

$stringona = @array;

mi riporta invece 4? esiste un modo oltre a foreach per concatenare tutti
gli elementi di un array?

--
Fri(END), Boyfri(END), Girlfri(END), Bestfri(END). Everything has an END
except...Fam(ILY)! It Has 3 Letters that say I LOVE YOU

Andrea Maestrutti

unread,
Apr 4, 2015, 1:04:54 PM4/4/15
to
liftman wrote:

> se eseguo :print @array; #ottengo pincopallinotiziocaio
> se però faccio una cosa tipo questa:
> if (@array=~ /tizio/) {
> print "ho trovato tizio \r\n";
> }
>
> non ottengo niente perchè in questo caso @array mi ritorna solo il
> numero degli elementi

Infatti, perché lo stai utilizzando in contesto di lista.
Per approfondire il concetto generale di contesto ti consiglio di
leggere il documento seguente:

<http://www.geek0x90.org/articoli/contesto_perl.txt>


, quindi se modifico così:
> if (@array=~ /4/) {
> print "ho trovato 4 elementi \r\n";
> }

Qua potresti usare grep, tipo:

if ( grep( /^$valore$/, @array) ) {
print "trovato";
}

ma ti consiglio di usare il modulo List::Util.


> La mia domanda da pivello è pure semplice.... se
>
> print @array;
>
> mi ritorna una stringa con tutti gli elementi uno dopo l'altro, perchè
>
> $stringona = @array;
>
> mi riporta invece 4? esiste un modo oltre a foreach per concatenare
> tutti gli elementi di un array?

Perché in un contesto scalare, @array è come dire scalar(@array) ovvero
ti dice quanti elementi ci sono nell'array (diversamente da $#array che
ti dà l'indice dell'ultimo elemento dell'array).

Leggiti quel documento e ne riparliamo. Ciao.

liftman

unread,
Apr 4, 2015, 5:18:27 PM4/4/15
to

"Andrea Maestrutti" <maest...@friuli.com> ha scritto nel messaggio
news:mfp5ji$mmk$1...@speranza.aioe.org...

>> non ottengo niente perchè in questo caso @array mi ritorna solo il
>> numero degli elementi
>
> Infatti, perché lo stai utilizzando in contesto di lista.
> Per approfondire il concetto generale di contesto ti consiglio di leggere
> il documento seguente:
>
> <http://www.geek0x90.org/articoli/contesto_perl.txt>

darò un'occhiata sicuramente, anche se conosco sommariamente il meccanismo
del "contesto".

> , quindi se modifico così:
>> if (@array=~ /4/) {
>> print "ho trovato 4 elementi \r\n";
>> }
>
> Qua potresti usare grep, tipo:
>
> if ( grep( /^$valore$/, @array) ) {
> print "trovato";
> }

in effetti funziona ma c'è un "$" di troppo :-) if ( grep( /^$valore/,
@array) ) {

> ma ti consiglio di usare il modulo List::Util.

credo che sia come sparare ad un passero con un cannone, meglio grep()
almeno in questo caso :-)

Grazie per il supporto!
0 new messages