Perl JOIN într-un mod diferit?

I am working on a perl module and looking for an output (string) of the form : a:value1 OR a:value2 OR a:value3 OR ...

Valorile value1, value2, value3 ... se află într-o matrice (de exemplu, @values).

I know we could use join( ' OR ', @values ) to create a concatenated string of the form: value1 OR value2 OR value3 OR ...

Dar după cum vedeți mai sus, am nevoie de un cod suplimentar a: care să fie prefixat la fiecare valoare.

Care ar fi un mod elegant de a face acest lucru?

4

1 răspunsuri

De obicei, utilizați harta pentru astfel de lucruri:

#!/usr/bin/env perl
use strict;
use warnings;

my @array = qw(value1 value2 value3);
print join(" OR ", map "a:$_", @array),"\n";

ieşire:

a:value1 OR a:value2 OR a:value3

map is a simple looping construct, which is useful when you want to do apply some simple logic to every element of a list without making too much clutter of your code.

5
adăugat
@Borodin: Construcția de looping a fost înțeleasă mai mult ca o modalitate concisă de a descrie ceea ce face map decât o definiție formală. Dacă puteți sugera un alt termen, aș fi bucuros să actualizez răspunsul.
adăugat autor flesk, sursa
funcționează perfect!
adăugat autor Saket, sursa
În timp ce map poate fi implementat ca o buclă intern, scopul său este de a furniza o funcție de mapare sau care ghidează o listă în alta transformând toate elemente ale listei în conformitate cu aceeași regulă. Nu este util să ne gândim la aceasta ca la o construcție looping .
adăugat autor Borodin, sursa
Spui "Nu este util să te gândești la asta ca la o construcție looping". după ce a explicat ("transformarea tuturor elementelor"). (Ar trebui să fie "fiecare", nu "tot", deși. Știi, ca "pentru fiecare", dar este "hartă fiecare" aici.)
adăugat autor ikegami, sursa
Este util să o considerați looping dacă transferați starea de la o iterație la alta, mai ales dacă rezultatul final depinde de ordinea execuției.
adăugat autor reinierpost, sursa