पर्ल एक अलग तरीके से जॉइन?

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 ...

मान value1, value2, value3 ... एक सरणी में हैं (कहें, @values)।

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

लेकिन जैसा कि आप ऊपर देखते हैं, मुझे प्रत्येक मान पर प्रीपेड करने के लिए अतिरिक्त a: की आवश्यकता है।

ऐसा करने का एक साफ तरीका क्या होगा?

4
जोड़ा संपादित
विचारों: 1

1 उत्तर

आप आमतौर पर इन प्रकार की चीजों के लिए मानचित्र का उपयोग करते हैं:

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

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

आउटपुट:

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
जोड़ा
@ बोरोडिन: औपचारिक परिभाषा की तुलना में map क्या वर्णन करता है इसका वर्णन करने के संक्षिप्त तरीके के रूप में लूपिंग निर्माण का मतलब अधिक था। यदि आप एक और शब्द का सुझाव दे सकते हैं, तो मुझे जवाब अपडेट करने में खुशी होगी।
जोड़ा लेखक flesk, स्रोत
अच्छी तरह से काम!
जोड़ा लेखक Saket, स्रोत
जबकि map को आंतरिक रूप से लूप के रूप में कार्यान्वित किया जा सकता है, इसका उद्देश्य मैपिंग या फ़ंक्शन प्रदान करना है जो सभी को एक करके बदलकर एक सूची में मानचित्र करता है एक ही नियम के अनुसार सूची के तत्व। इसे लूपिंग निर्माण के रूप में सोचने के लिए उपयोगी नहीं है।
जोड़ा लेखक Borodin, स्रोत
आप कहते हैं, "इसे लूपिंग निर्माण के रूप में सोचना उपयोगी नहीं है।" यह समझाने के बाद ("सभी तत्वों को बदलना") है। ("प्रत्येक" होना चाहिए, न कि "सब", हालांकि, आप जानते हैं, जैसे "प्रत्येक के लिए", लेकिन यह "प्रत्येक को मानचित्र" यहां है।)
जोड़ा लेखक ikegami, स्रोत
यदि आप एक पुनरावृत्ति से राज्य को अगले स्थान पर ले जाते हैं, तो विशेष रूप से यदि अंतिम परिणाम निष्पादन के आदेश पर निर्भर करता है तो इसे लूपिंग के रूप में मानना ​​उपयोगी होता है।
जोड़ा लेखक reinierpost, स्रोत