ऐरे और लिस्ट, दोनों में स्कैलर का एक क्रमबद्ध संग्रह होता है। रेफरेंस इस्तेमाल करने के अलावा (जिस पर एक अलग कॉन्सेप्ट में बात की जाएगी), इसका मतलब है कि ऐरे और लिस्ट हमेशा सपाट रहते हैं, यानी उनके अंदर दूसरे ऐरे या लिस्ट नहीं हो सकते।
ज़्यादातर मामलों में लिस्ट को गोल ब्रैकेट () के अंदर लिखा जाता है, और उसके एलिमेंट के बीच कॉमा , लगाया जाता है।
ऐरे वेरिएबल में आम तौर पर उसके अंदर एक लिस्ट असाइन करके वैल्यू भरी जाती है, जैसे my @names = ('Alice', 'Bob', 'Charlie');.
ऐरे या लिस्ट के एलिमेंट तक पहुँचने के लिए सबस्क्रिप्ट के ज़रिए इंडेक्स बताया जाता है, जैसे ('Alice', 'Bob', 'Charlie')[1] # 'Bob'.
Perl में इंडेक्स 0 से शुरू होते हैं।
निगेटिव इंडेक्स ऐरे या लिस्ट के अंत से गिने जाते हैं, जैसे ('Alice', 'Bob', 'Charlie')[-1] # 'Charlie'.
ऐरे और लिस्ट पर काम करने के लिए कई फंक्शन बनाए गए हैं। इनमें सबसे उपयोगी हैं grep, जो शर्त पूरी करने वाले एलिमेंट की छनी हुई नई लिस्ट देता है; map, जो हर एलिमेंट को बदलकर वैल्यू की नई लिस्ट बनाता है; और sort, जो एलिमेंट को नए क्रम में लगाकर नई लिस्ट देता है।
ऐरे में बदलाव करने वाले फंक्शनों में शामिल हैं: push (अंत में एलिमेंट जोड़ने के लिए), pop (अंतिम एलिमेंट हटाने के लिए), shift (पहला एलिमेंट हटाने के लिए), unshift (शुरू में एलिमेंट जोड़ने के लिए) और splice (ज़्यादा जटिल बदलावों के लिए)।
for(each) स्टेटमेंट के ज़रिए ऐरे और लिस्ट पर इटरेशन करना भी आपको अक्सर देखने को मिलेगा।
ऐरे के एलिमेंट तक पहुँचते समय जो सिगिल लगाया जाता है, वही तय करता है कि नतीजा क्या होगा।
वेरिएबल के नाम के अंत में लगा सबस्क्रिप्ट [] ही Perl को बताता है कि आप उस नाम वाले ऐरे को इस्तेमाल कर रहे हैं।
my @names = ('Alice', 'Bob', 'Charlie');
$names[0]; # 'Alice' <- A scalar
@names[0]; # ('Alice') <- A slice (with only one index, this probably isn't what you want. There will be a warning.)
%names[0]; # (0, 'Alice') <- A key/index + value slice
$names[1, 2]; # 'Charlie' <- A scalar (via unsupported syntax for an ancient feature. Probably not what you want. There will be a warning.)
@names[1, 2]; # ('Bob', 'Charlie') <- A slice
%names[1, 2]; # (1, 'Bob', 2, 'Charlie') <- A key/index + value slice
हालाँकि ऐसा करने की अनुमति है, लेकिन पढ़ने में आसानी के लिए यह सलाह दी जाती है कि अलग-अलग टाइप के वेरिएबल के लिए एक ही नाम न रखें।
ऐरे और लिस्ट में बहुत समानताएँ हैं, और कई जगहों पर इन्हें एक-दूसरे की जगह इस्तेमाल किया जा सकता है, लेकिन दोनों एक ही चीज़ नहीं हैं। लिस्ट स्कैलर का एक स्थिर संग्रह होती है, जिसे बदला नहीं जा सकता। ऐरे स्कैलर का एक ऐसा संग्रह है जिसमें बदलाव हो सकता है: उसका कंटेंट और ऐरे का आकार, दोनों बदले जा सकते हैं।
कुछ कॉन्टेक्स्ट में इनका व्यवहार अलग-अलग होता है। स्कैलर कॉन्टेक्स्ट में इस्तेमाल किया गया ऐरे आपको उसका आकार बताता है। स्कैलर कॉन्टेक्स्ट में इस्तेमाल की गई लिस्ट आपको उसका अंतिम एलिमेंट देती है, और साथ में कुछ चेतावनियाँ भी दे सकती है, क्योंकि उसके बाकी कंटेंट वॉइड कॉन्टेक्स्ट में इस्तेमाल हो रहे हैं।
my @names = ('Alice', 'Bob', 'Charlie');
scalar @names; # 3
scalar ('Alice', 'Bob', 'Charlie'); # 'Charlie' (and some warnings).
और जानने के लिए यह FAQ पढ़िए: लिस्ट और ऐरे में क्या अंतर है?