Perl'de nasıl eğer $a değişkeni tanımlanır ve kısaca içeren bir onay olmayan dize uzunluğu sıfır miyim?
Ben şu anda aşağıdaki Perl eğer bir değişkenin tanımlı olup olmadığını kontrol etmek için kullanın ve metin içerir. defined
ilk kontrol etmek için bir önlemek için var 'başlatılmamış değer' uyarı:
if (defined $name && length $name > 0) {
# do something with $name
}
(Muhtemelen daha kısa) daha iyi bir şekilde bu yazan mı var?
CEVAP
Sen undef değerini (ve kusurlu değişken söyler Perl 5.10) kullanmak için: uyarı ile uğraşmak zorunda değilsiniz bu yüzden sık sık definedness için kontrol edin
Use of uninitialized value $name in ...
Yani, bu uyarı, insanlar gelip ile her türlü Kanunu ve o kodu başlar gibi bakmak önemli bir parçası da çözüm yerine sakız ve koli bandı. Bazen, daha iyi ne yaptığını açıkça önlemek için çalıştığınız uyarı kapatarak göstermek için:
{
no warnings 'uninitialized';
if( length $name ) {
...
}
}
Diğer durumlarda, veriler yerine null değeri bir tür kullanın. Perl 5.10's defined-or operator ile length
açık boş bir dize (tanımlı ve sıfır uzunlukta geri ver) uyarı tetikleyecek değişken yerine verebilirsiniz:
use 5.010;
if( length( $name // '' ) ) {
...
}
Perl 5, 12, biraz length
on an undefined value also returns undefined çünkü daha kolay. Bu salaklık bir parça gibi görünebilir, ama olmak istemiş olabilirim matematikçi mutlu ediyor. Bu soru var neden olan bir uyarı, sorun yok.
use 5.012;
use warnings;
my $name;
if( length $name ) { # no warning
...
}