كيف يمكنني تحديد ما إذا كان علامة Perl تحتوي على رسم خرائط مفتاح بقيمة غير محددة؟
سؤال
أحتاج إلى تحديد ما إذا كان بيرل هوه يحتوي على مفتاح معين ، ولكن سيتم تعيين هذا المفتاح بقيمة UNDEF. على وجه التحديد ، فإن الدافع لهذا هو معرفة ما إذا كانت أعلام منطقية أثناء استخدامها getopt()
مع مرجع التجزئة مرت فيه. لقد بحثت بالفعل في كل من هذا الموقع وجوجل ، و exists()
و defined()
لا يبدو أن الأمر ينطبق على الموقف ، فهم يرون فقط ما إذا كانت القيمة الخاصة بمفتاح معين غير محددة ، فهي لا تتحقق مما إذا كان التجزئة لديه المفتاح بالفعل. إذا كنت RTFM هنا ، فيرجى توجيهني إلى الدليل الذي يفسر هذا.
المحلول
موجود () والمحدد () لا يبدو أنه قابل للتطبيق على الموقف ، فهم يرون فقط ما إذا كانت القيمة لمفتاح معين غير محددة ، فهي لا تتحقق مما إذا كان التجزئة لديه بالفعل المفتاح
غير صحيح. هذا في الواقع ما defined()
لا ، ولكن exists()
يفعل بالضبط ما تريد:
my %hash = (
key1 => 'value',
key2 => undef,
);
foreach my $key (qw(key1 key2 key3))
{
print "\$hash{$key} exists: " . (exists $hash{$key} ? "yes" : "no") . "\n";
print "\$hash{$key} is defined: " . (defined $hash{$key} ? "yes" : "no") . "\n";
}
ينتج عنه:
$hash{key1} exists: yes $hash{key1} is defined: yes $hash{key2} exists: yes $hash{key2} is defined: no $hash{key3} exists: no $hash{key3} is defined: no
تتوفر وثائق هاتين وظيفتين في سطر الأوامر على perldoc -f defined
و perldoc -f exists
(أو اقرأ الوثائق لجميع الطرق في perldoc perlfunc
*). وثائق الويب الرسمية موجودة هنا:
*نظرًا لأنك ذكرت RTFM على وجه التحديد وقد لا تكون على دراية بمواقع وثائق Perl ، اسمحوا لي أيضًا بالإشارة إلى أنه يمكنك الحصول على فهرس كامل لجميع Perldocs في perldoc perl
او عند http://perldoc.perl.org.
نصائح أخرى
إذا كنت أقرأ سؤالك بشكل صحيح ، أعتقد أنك مرتبك موجود. من الوثائق:
موجود expr
بالنظر إلى تعبير يحدد عنصر التجزئة أو عنصر الصفيف ، يُرجع صحيحًا إذا تم تهيئة العنصر المحدد في التجزئة أو الصفيف ، حتى لو كانت القيمة المقابلة غير محددة.
علي سبيل المثال:
use strict;
use warnings;
my %h = (
foo => 1,
bar => undef,
);
for my $k ( qw(foo bar baz) ){
print $k, "\n" if exists $h{$k} and not defined $h{$k};
}
اجابة قصيرة:
if ( exists $hash{$key} and not defined $hash{$key} ) {
...
}