Perl का असरदार इस्तेमाल करने के लिए रेफरेंस को समझना एक बुनियादी बात है। चूँकि रेफरेंस स्केलर होते हैं, और ऐरे तथा हैश सिर्फ स्केलर ही रख सकते हैं, इसलिए इन डेटा स्ट्रक्चर को एक के अंदर एक रखने के लिए रेफरेंस ही सबसे ज़रूरी चीज़ हैं।
पहले से मौजूद वेरिएबल और सबरूटीन के लिए बैकस्लैश ऑपरेटर \ इस्तेमाल करके रेफरेंस बनाए जा सकते हैं:
\$scalar से स्केलर रेफरेंस बनता है (यह कोई भी स्केलर हो सकता है, जैसे \1, सिर्फ वेरिएबल ही नहीं)।\@array से ऐरे रेफरेंस बनता है।\%hash से हैश रेफरेंस बनता है।\&sub से कोड रेफरेंस बनता है।आप ऐरे, हैश और सबरूटीन के लिए अनाम रेफरेंस भी बना सकते हैं:
['Alice', 'Bob', 'Charlie'] से अनाम ऐरे रेफरेंस बनता है।{foo => 'a', bar => 'b', baz => 'c'} से अनाम हैश रेफरेंस बनता है।sub { return 1 } से अनाम कोड रेफरेंस बनता है।चेतावनी: Perl में घुंघराले ब्रैकेट कुछ जगहों पर अस्पष्ट हो सकते हैं। अगर आपको वह हैश रेफरेंस नहीं मिल रहा जिसकी आप उम्मीद कर रहे हैं, तो अस्पष्टता दूर करने के लिए उसके आगे एक प्लस लगाइए, जैसे +{}. ज़्यादा जानकारी के लिए घुंघराले ब्रैकेट देखिए।
ऐरो ऑपरेटर -> इस्तेमाल करके रेफरेंस तक पहुँचा जा सकता है:
$ref->[0] से ऐरे रेफरेंस के अंदर के एलिमेंट तक पहुँचा जाता है।$ref->{foo} से हैश रेफरेंस के अंदर की वैल्यू तक पहुँचा जाता है।$ref->($arg) से कोड रेफरेंस के ज़रिए सबरूटीन को कॉल किया जाता है।जटिल डेटा स्ट्रक्चर, जैसे बहुआयामी ऐरे और नेस्टेड हैश, के अंदर के डेटा तक सबस्क्रिप्ट को एक के बाद एक जोड़कर पहुँचा जा सकता है, जैसे $ref->{foo}[0]{bar} (यह $ref->{foo}->[0]->{bar} जैसा ही है)।
अगर आप किसी पूरे ऐरे या हैश का डीरेफरेंस करना चाहते हैं, तो ऐरो ऑपरेटर के बाद क्रमशः @* या %* लगाइए, जैसे $ref->@* या $ref->%*.
आप * की जगह कोई सबस्क्रिप्ट लगाकर ऐरे या हैश रेफरेंस का स्लाइस भी निकाल सकते हैं, जैसे $ref->@[0..2] या $ref->@{'Foo', 'Bar'}.
स्लाइस के मामले में सिगिल में जो बदलाव होता है, वह ठीक उसी तरह होता है जैसे ऐरे और हैश वेरिएबल के साथ होता है।