समारोह push() पर्ल में

में पर्ल प्रोग्रामिंग भाषा में बनाया गया है एक समारोह push(). इस सुविधा का उपयोग कर, आप कर सकते हैं के लिए तत्वों को जोड़ने के अंत में पर्ल सरणी.

यहाँ एक उदाहरण है:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my @arr = (1, 2);

push @arr, undef, 'Hello', 8;

print Dumper \@arr;

इस कार्यक्रम को परिभाषित करता है एक सरणी @arr के साथ दो तत्वों. तो समारोह का उपयोग कर push() इस सरणी में जोड़ें और 3 आइटम नहीं है । undef, लाइन 'Hello' और नंबर 8.

आउटपुट इस कार्यक्रम से:

$VAR1 = [
          1,
          2,
          undef,
          'Hello',
          8
        ];

तर्क

push(@arr, $value1, $value2);
push(@arr, @other_arr);
push(@arr, @other_arr, @and_the_other_arr);

मानक का उपयोग कर push() है, इसे पारित नहीं है कम से कम दो तत्वों के साथ.

पहले तत्व होना चाहिए एक सरणी (कुछ संस्करणों के पर्ल पहली तत्व हो सकता है एक सरणी के संदर्भ में, लेकिन इस उपयोग की सिफारिश नहीं है, के विवरण में एक और अनुभाग के नीचे देखें)

निम्न तर्क कर रहे हैं आमतौर पर scalars या सरणियों. सरणी में पहली तर्क जोड़ दिया जाएगा करने के लिए सभी तत्वों के निम्न तर्क.

तर्क के रूप में निर्दिष्ट कर सकते हैं हैश push(@arr, %hash). सरणी में @arr में जोड़ा जाएगा सभी जोड़े महत्वपूर्ण मूल्य के हैश (वहाँ ख़ासियत है कि आदेश के हैश मान अपरिभाषित है और अलग से चलाता है के एक ही कार्यक्रम बना सकते हैं सरणी में तत्वों के विभिन्न दृश्यों). लेकिन वास्तविक जीवन के उपयोग हैश के रूप में एक समारोह में तर्क push() दुर्लभ है ।

यदि आप निर्दिष्ट नहीं करते किसी भी तर्क से, यह त्रुटि होगा:

Not enough arguments for push at script.pl line 3, near "push()"
Execution of script.pl aborted due to compilation errors.

यदि आप निर्दिष्ट एक तर्क है और यह तर्क एक सरणी है push(@arr);, तो त्रुटि नहीं होगा यह परिवर्तन नहीं करता है सरणी, लेकिन अगर कोड use warnings;, है कि चेतावनी:

Useless use of push with no values at script.pl line 8.

वापसी मान

समारोह push() तत्वों की संख्या देता है में था कि सरणी के बाद इस समारोह में प्रदर्शन.

my $number = push(@arr, $value);

इस कोड के समान है, इस कोड के बारे में:

push(@arr, $value);
my $number = scalar(@arr);

वापसी मान push() की जरूरत है बहुत अक्सर नहीं है. बहुत अक्सर इस्तेमाल किया जाता है push(@arr, $value), और वापसी मूल्य को नजरअंदाज कर दिया है.

उपयोग ARRAYREF के रूप में पहला तर्क

मानक का उपयोग कर push() — पहला तर्क है सरणी में है, जो के तत्वों को जोड़ रहे हैं से अन्य सभी तर्कों.

लेकिन प्रोग्रामिंग भाषा में पर्ल एक प्रयोग किया गया था. अगर पहला तर्क एक सरणी है, संदर्भ समारोह push()में ही क्या dereferencing संदर्भ में यह और जोड़ा गया करने के लिए डेटा सरणी ।

यहाँ कोड है.

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my $arr = [];

push $arr, 1;

warn Dumper $arr;

पर्ल संस्करण के लिए 5.12 (समावेशी) के लिए इस कोड त्रुटि फेंकता:

Type of arg 1 to push must be array (not private variable) at script.pl line 9, near "1;"
Execution of script.pl aborted due to compilation errors.

शुरू करने के साथ पर्ल 5.14 और 5.18 संस्करण के लिए (शामिल) के लिए कोड जोड़ा गया में आइटम ARRAYREF, और परिणाम था:

$VAR1 = [
          1
        ];

पर्ल 5.20 और 5.22 भी जोड़ा गया में एक आइटम ARRAYREF, लेकिन यह भी दे दी है चेतावनी:

push on reference is experimental at script.pl line 9.
$VAR1 = [
          1
        ];

और संस्करण के साथ शुरू 5.24 के इस कोड देता है त्रुटि:

Experimental push on scalar is now forbidden at script.pl line 9, near "1;"
Execution of script.pl aborted due to compilation errors.

इस सुविधा के लिए भाषा का उपयोग की सिफारिश नहीं है । अगर आप की जरूरत है जोड़ने के लिए में आइटम ARRAYREF, यह सबसे अच्छा है करने के लिए स्पष्ट रूप से लिखने push @{$arr}, 1; इसके बजाय push $arr, 1;

यहाँ कोड है कि समान काम करता है के सभी संस्करणों पर पर्ल:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my $arr = [];

push @{$arr}, 1;

warn Dumper $arr;

सरकारी दस्तावेज

यहाँ उत्पादन के आदेश perldoc -f push:

       push ARRAY,LIST
       push EXPR,LIST
               Treats ARRAY as a stack by appending the values of LIST to the
               end of ARRAY.  The length of ARRAY increases by the length of
               LIST.  Has the same effect as

                   for $value (LIST) {
                       $ARRAY[++$#ARRAY] = $value;
                   }

               but is more efficient.  Returns the number of elements in the
               array following the completed "push".

               Starting with Perl 5.14, "push" can take a scalar EXPR, which
               must hold a reference to an unblessed array.  The argument will
               be dereferenced automatically.  This aspect of "push" is
               considered highly experimental.  The exact behaviour may change
               in a future version of Perl.

               To avoid confusing would-be users of your code who are running
               earlier versions of Perl with mysterious syntax errors, put
               this sort of thing at the top of your file to signal that your
               code will work only on Perls of a recent vintage:

                   use 5.014;  # so push/pop/etc work on scalars (experimental)

संबंधित विषयों

अन्य लेख