سؤال

وأنا أبحث عن طريق كود بيرل وأنا أرى هذا:

sub html_filter {
    my $text = shift;
    for ($text) {
        s/&/&/g;
        s/</&lt;/g;
        s/>/&gt;/g;
        s/"/&quot;/g;
    }
    return $text;
}

وماذا الحلقة for القيام به في هذه القضية وماذا كنت تفعل ذلك بهذه الطريقة؟

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

المحلول

ودون وجود متغير حلقة صريح، تستخدم حلقة for متغير خاص يسمى $_. البيانات الاستبدال داخل الحلقة <م> أيضا استخدام متغير $_ خاص ليتم تحديد لا شيء آخر، لذلك هذا هو مجرد خدعة لجعل شفرة المصدر أقصر. وربما سيكتب هذه الوظيفة على النحو التالي:

sub html_filter {
    my $text = shift;
    $text =~ s/&/&amp;/g;
    $text =~ s/</&lt;/g;
    $text =~ s/>/&gt;/g;
    $text =~ s/"/&quot;/g;
    return $text;
}

وهذا لن يكون له عواقب والأداء وغير قابلة للقراءة من قبل أشخاص آخرين من بيرل.

نصائح أخرى

ووالأسماء المستعارة حلقة for كل عنصر من عناصر القائمة حلقات على مدى ل$_. في هذه الحالة، ليس هناك سوى عنصر واحد، $text.

وضمن الجسم، وهذا يسمح احد لكتابة

s/&/&amp;/g;

وغيرها. بدلا من الاضطرار لكتابة

$text =~ s/&/&amp;/g;

ومرارا وتكرارا. انظر أيضا perldoc perlsyn .

وكما يشير السيد Hewgill بها، نموذج التعليمات البرمجية وأنك تؤسس ضمنا والتعرج إلى $ _، المتغير ضمني السحرية.

وانه يقدم بديلا وهذا هو أكثر قابلية للقراءة على حساب من التعليمات البرمجية النمطي.

وليس هناك ما يدعو للتضحية قراءة الإيجاز. ببساطة استبدال توطين الضمني وتعيين مع إصدار صريح:

sub html_filter {
    local $_ = shift;

    s/&/&amp;/g;
    s/</&lt;/g;
    s/>/&gt;/g;
    s/"/&quot;/g;

    return $_;
}

إذا لم أكن أعرف بيرل كل ذلك بشكل جيد، وجاءت عبر هذا الرمز، كنت أعرف أنني بحاجة للنظر في مستندات ل <لأ href = "http://perldoc.perl.org/perlvar.html #٪ 24_ "يختلط =" نوفولو noreferrer "> $_ و local --as مكافأة في perlvar، هناك أمثلة على href="http://perldoc.perl.org/perlvar.html#nasty_break" من توطين $_ .

لأي شخص يستخدم بيرل الكثير، ما سبق يجب أن يكون من السهل أن نفهم.

وهكذا هو في الحقيقة لا يوجد سبب للتضحية قراءة الإيجاز هنا.

وانها تستخدم فقط لاسم مستعار $ النص إلى $ _، المتغير الافتراضي. القيام به لأنهم كسول جدا للاستخدام متغير صريح أو لا تريد أن تضيع دورات الثمينة خلق العددية الجديد.

والتنظيف لتصل &، <،> وشخصيات الاقتباس واستبدالها مع حرف كيان HTML المناسبة.

ووحلقات من خلال النص وبدائل بك اقحام (&) مع وأمبير، <مع ولتر،> مع & GT و "مع ومثل ومنها يمكنك أن تفعل هذا من أجل الإخراج إلى وثيقة. هتمل ... تلك هي الشخصيات كيان المناسبة .

والرمز الأصلي يمكن أن تكون أكثر مرونة باستخدام wantarray لاختبار السياق المطلوب:

sub html_filter {
    my @text = @_;
    for (@text) {
        s/&/&amp;/g;
        s/</&lt;/g;
        s/>/&gt;/g;
        s/"/&quot;/g;
    }
    return wantarray ? @text: "@text"; }

وبهذه الطريقة يمكن أن نسميها في سياق القائمة أو السياق العددية ونعود النتائج الصحيحة، على سبيل المثال:

my @stuff = html_filter('"','>');
print "$_\n" for @stuff;

my $stuff = html_filter('&');
print $stuff;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top