سؤال

وأنا على تشغيل بيرل، v5.6.1 بنيت لsun4-سولاريس-64int

وأنا أدعو الطباعة على صفيف:

print "@vals\n";

والناتج يشبه:

HASH(0x229a4) uid cn attuid

وأو مثال آخر:

@foo = {};
push(@foo, "c");

print "@foo I am done now\n";

ومع إخراج:

HASH(0x2ece0) c I am done now

وأين يقع HASH(0x2ece0) القادمة من؟

هل كانت مفيدة؟

المحلول

والأقواس الخاص بك فيfoo = {} تخلق ذلك. الأقواس إنشاء مرجع التجزئة لم يكشف عن اسمه.

إذا كنت ترغب في تعيينfoo إلى قائمة فارغة، استخدمfoo = ()

نصائح أخرى

والمفتاح لفهم هذا النوع من المشكلة هو أن تحصل على بند إضافي في الإخراج. انها ليست مهمة جدا ما هو هذا البند.

في عام، فإن أول شيء كنت تريد أن تفعل عندما متغير حاوية لديه أكثر (أو أقل) في ذلك مما كنت أتوقع هو أن ننظر إلى انها المحتويات. وحدة بيانات :: شاحنة قلابة يأتي مع بيرل، ويمكن جدا هياكل البيانات المطبوعة بالنسبة لك:

use Data::Dumper;
print Dumper( \@foo );

وبمجرد رؤية ما هو موجود في الحاويات الخاصة بك، يمكنك البدء في العمل الى الوراء لمعرفة كيف حصلت هناك. وكنت في نهاية المطاف يلاحظ هذا الحق بعد تهيئةfoo أنه سبق له أن عنصر واحد، وهي ليست ما تريد.

وحيلة أخرى هي التحقق من عدد من العناصر في القائمة:

print "There are " . @array . " elements in \@array\n";

إذا تحصل على عدد لا تتوقع، والعمل الى الوراء لمعرفة متى أظهر عنصر إضافي يصل.

لديك عن طريق الخطأ إشارة التجزئة فيfoo. عند طباعة إشارة من دون dereferencing ذلك (دائما تقريبا عن طريق الصدفة)، وتحصل على سلسلة التصحيح (نوع من الإشارة أنه وموقع الذاكرة).

وأعتقد أنك تريد my @foo = (); push @foo, "c"; بدلا من ما لديك الآن. من ناحية أخرى، يمكنك أيضا أن أقول ببساطة my @foo; لإنشاء مجموعة. أنت لا تحتاج إلى وضع علامة عليه صراحة فارغة مع ().

perldoc perlreftut و <لأ href = "http://perldoc.perl.org /perlref.html "يختلط =" نوفولو noreferrer "> perldoc perlref للحصول على مزيد من المعلومات حول المراجع.

يجب أن تكتب

والتعليمات البرمجية الخاصة بك مثل هذا:

use strict;
use warnings;

my @foo;
push @foo, "c";

print "@foo I am done now\n";

وأنت لست بحاجة إلى تهيئة المتغيرات في بيرل، إذا كنت تريد أن يكون متغير فارغ. ولكن يجب عليك استخدام my لتعريف متغير محلي. وأنت لا تحتاج أقواس حول المدمج في وظائف، فقط يضيف فوضى.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top