SORU
19 EYLÜL 2015, CUMARTESİ


&Lt ne diyor;&m>''=~m lt;> sözdizimi perl?

Perl çok alışılmadık sözdizimi vardır, ama iş yerinde bir kod parçası üzerinden bana şaşkın bıraktı o gün geldiğimi anlıyorum. Birisi bunun ne anlama geldiğini bana açıklayabilir misiniz:

<<'m'=~m>>
print $a unless $b;
return;
m
;

Şimdiye kadar gördüğüm herhangi bir biçimde HEREDOC sözdizimi gibi görünüyor.

CEVAP
19 EYLÜL 2015, CUMARTESİ


Bugizlisözdizimi ornate double-bladed sword olarak bilinir ve tipik olarak gösterilir:

<<m=~m>>

Comments here

m
;

Sınırlayıcı olarak çok satırlı, heredoc sözdizimi ve MAÇ operatörü (=~) > yorumlar kesmek.

Bölüm /, sınırlayıcı olarak değil eşleşen, 'm' operatör gereklidir. için Not olarak, Örneğin $my_var =~ /test/ $my_var =~ >test> geçersiz olurdu oysa $my_var =~ m>test>, eşdeğerdir.

Senin parçasında m ilk karakteri tek tırnak, $a $b değişkenleri anlamı kapalı olmasına dikkat aralıklı olmayacak. Bu tırnak (verilen kod benim örnek başına) perl otomatik olarak sonuna çift tırnak eklemek istiyorum, ihmal edilmiş marker ve herhangi bir sonraki değişken aralıklı olur. Bu ise $a $b artık tanımlanmışsa sorunlara neden olur ve use warnings; kullanıyorsun.

Süslü çift bıçak yukarıdaki örnekte anlamak daha kolay (ama yine de tavsiye edilmez), yazabiliriz:

<<"END" =~ //

Comments here

END
;

=~ // gereksiz olduğunu unutmayın, bu eşdeğerdir:

<<"END";

Comments here

END

Sadece boşluk bağlamda standart heredoc sözdizimi.

Void bağlamda bir dize olması sorunlara neden olabilir gibi üretim kodunda bunu kullanarak tavsiye etmem. Ayrıca bu kodu bile en deneyimli perl programcılar için kafa karıştırıcı ve amaçsızca okumak ve korumak zordur! Eğer çok satırlı Uygun Yorum oluşturmak istiyorsan, o zaman burada açıkladı How do I enter a multi-line comment in Perl? pod yapışmasını öneririm

Bu kadar temizler umuyoruz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Canal de arkyoru

    Canal de ark

    18 Ocak 2007
  • RiverCityGraphix

    RiverCityGra

    6 Ocak 2012
  • stewmurray47

    stewmurray47

    1 Kasım 2006