অ্যারে ও লিস্টে স্কেলারের একটি ক্রমবদ্ধ সংগ্রহ থাকে। রেফারেন্স ব্যবহার বাদ দিলে (যা আলাদা একটি ধারণায় আলোচনা করা হবে), এর মানে হলো অ্যারে ও লিস্ট সবসময় সমতল, অর্থাৎ এদের ভেতরে অন্য কোনো অ্যারে বা লিস্ট থাকতে পারে না।
বেশিরভাগ ক্ষেত্রে লিস্টকে বন্ধনী () দিয়ে ঘেরা হয় এবং এর এলিমেন্টগুলো কমা , দিয়ে আলাদা করা হয়।
সাধারণত একটি অ্যারে ভ্যারিয়েবলে একটি লিস্ট অ্যাসাইন করে তার মান বসানো হয়, যেমন 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: লিস্ট আর অ্যারের মধ্যে পার্থক্য কী?