Bu, Ubuntu Online, Fedora Online, Windows çevrimiçi emülatörü veya MAC OS çevrimiçi emülatörü gibi birden fazla ücretsiz çevrimiçi iş istasyonumuzdan birini kullanarak OnWorks ücretsiz barındırma sağlayıcısında çalıştırılabilen perltrap komutudur.
Program:
ADI
perltrap - Dikkatsizler için Perl tuzakları
TANIM
En büyük tuzak, "uyarıları kullanmayı" veya -w değiştirmek; uyarılara bakın
ve perlrun. İkinci en büyük tuzak, tüm programınızı "kullanım" altında çalıştırılabilir hale getirmemektir.
katı". Üçüncü en büyük tuzak, bu sürümdeki değişikliklerin listesini okumamaktır.
Perl; bkz. perldelta.
awk Tuzaklar
Alışılmış awk kullanıcılar aşağıdakilere özellikle dikkat etmelidir:
· Bir Perl programı, her giriş satırı için bir kez değil, yalnızca bir kez yürütülür. yapabilirsin
"-n" veya "-p" ile örtük döngü.
· İngilizce modülü, aracılığıyla yüklenir
İngilizce kullanın;
özel değişkenlere ($/ gibi) isimlerle ($RS gibi) atıfta bulunmanıza izin verir, sanki
onlarda dahildi awk; ayrıntılar için perlvar'a bakın.
· Perl'deki tüm basit ifadelerden sonra noktalı virgül gereklidir (bir
engellemek). Yeni satır bir ifade sınırlayıcı değildir.
· "if"ler ve "while"lar için küme parantezleri gereklidir.
· Perl'de değişkenler "$", "@" veya "%" ile başlar.
· Dizi dizini 0'dan. Aynı şekilde dize konumları alt dizi () ve dizin ().
· Dizinizin sayısal mı yoksa dize dizinleri mi olduğuna karar vermelisiniz.
· Hash değerleri sadece referans olarak ortaya çıkmaz.
· Dizi mi yoksa sayısal karşılaştırmaları mı kullanmak istediğinize karar vermelisiniz.
· Bir girdi satırını okumak sizin için onu bölmez. Onu bir diziye böleceksin
kendin. Ve Bölünmüş() operatörün farklı argümanları var awkVar.
· Geçerli giriş satırı normalde $_ içindedir, 0$ değil. Genellikle sahip değildir
yeni satır kaldırıldı. ($0 yürütülen programın adıdır.) Bkz. perlvar.
· $basamak> alanları ifade etmez--son eşleşmeyle eşleşen alt dizileri ifade eder
desen.
· Yazdır() $ ayarlamadığınız sürece deyim alan ve kayıt ayırıcı eklemez ve
"$\". İngilizce modülünü kullanıyorsanız $OFS ve $ORS ayarını yapabilirsiniz.
· Dosyalarınızı yazdırmadan önce açmalısınız.
· Aralık operatörü virgül değil ".." şeklindedir. Virgül operatörü C'deki gibi çalışır.
· Eşleştirme operatörü "~" değil "=~" şeklindedir. ("~", C'de olduğu gibi, kişinin tümleyen operatörüdür.)
· Üs alma operatörü "**", "^" değil. "^", C'deki gibi XOR operatörüdür. (Siz
biliyorum, biri bunu hissedebilir awk temelde C ile uyumsuzdur.)
· Birleştirme operatörü ".", boş dize değil. (Boş dizeyi kullanmak
"/pat/ /pat/" öğesini ayrıştırılamaz hale getirin, çünkü üçüncü eğik çizgi bir
bölme operatörü - belirteç aslında operatörler için biraz içeriğe duyarlıdır
"/", "?" ve ">" gibi. Ve aslında, "." kendisi bir sayının başlangıcı olabilir.)
· "ileri", "çıkış" ve "devam" anahtar sözcükleri farklı çalışır.
· Aşağıdaki değişkenler farklı şekilde çalışır:
awk perl
ARGC skaleri @ARGV ($#ARGV ile karşılaştırın)
ARGV[0] $0
DOSYA ADI $ARGV
FNR $. - bir şey
FS (ne istersen)
NF $#Fld veya benzeri
$.
OFMT $#
OF $,
ORS $\
UZUNLUK uzunluk($&)
RS$/
RSTART uzunluğu($`)
ALT SEP $;
· $RS'yi bir modele ayarlayamazsınız, yalnızca bir dizeye ayarlayabilirsiniz.
· Şüpheye düştüğünüzde, çalıştırın awk aracılığıyla inşa etmek A2P ve sana ne verdiğini gör.
C / C ++ Tuzaklar
Cerebral C ve C++ programcıları aşağıdakilere dikkat etmelidir:
· "if" ve "while" lerde küme parantezleri gereklidir.
· "else if" yerine "elsif" kullanmalısınız.
· C'deki "break" ve "continue" anahtar sözcükleri Perl'de "son" ve "sonraki" olur,
sırasıyla. C'den farklı olarak, bunlar değil "do { } while" yapısı içinde çalışın. Görmek
Perlsyn'de "Döngü Kontrolü".
· switch deyimi "verilen/ne zaman" olarak adlandırılır ve yalnızca Perl 5.10 veya daha yeni sürümlerde kullanılabilir.
Perlsyn'de "Açıklamaları Değiştir" konusuna bakın.
· Perl'de değişkenler "$", "@" veya "%" ile başlar.
· Yorumlar "/*" veya "//" ile değil "#" ile başlar. Perl, C/C++ yorumlarını şu şekilde yorumlayabilir:
bölme operatörleri, sonlandırılmamış normal ifadeler veya tanımlı veya operatör.
· Perl'de benzer bir operatör olmasına rağmen hiçbir şeyin adresini alamazsınız.
bir referans oluşturan ters eğik çizgi.
· "ARGV" büyük harfle yazılmalıdır. $ARGV[0], C'nin "argv[1]" dir ve "argv[0]", 0 $ ile biter.
· Sistem aramaları gibi bağlantı(), bağlantıyı kaldır(), Adını değiştirmek(), vb. başarı için sıfırdan farklı bir değer döndürür, değil
0. (sistem()ancak başarı için sıfır döndürür.)
· Sinyal işleyiciler, sayılarla değil, sinyal adlarıyla ilgilenir. Bulmak için "kill -l" kullanın.
sisteminizdeki isimler.
JavaScript Tuzaklar
Makul JavaScript programcıları aşağıdakilere dikkat etmelidir:
· Perl'de ikili "+" her zaman toplamadır. "$string1 + $string2" her iki dizgiyi de dönüştürür
sayılara ve sonra onları ekler. İki dizeyi birleştirmek için "." Şebeke.
· "+" birli operatörü Perl'de hiçbir şey yapmaz. Sözdizimsellikten kaçınmak için var
belirsizlikler.
· "for...in"den farklı olarak, Perl'in "for"u ("foreach" olarak da yazılır) sol ele izin vermez
yan keyfi bir ifade olmak. Bir değişken olmalıdır:
$değişkenim için (%hash anahtarları) {
Kendi ID’n ile mağazalarını oluştur
}
Ayrıca, "foreach my $kv (%hash) {}" yinelendiği için oradaki "anahtarları" da unutmayın.
anahtarlar ve değerler üzerinde ve genellikle kullanışlı değildir ($kv bir anahtar olur, sonra bir
değer vb.).
· Bir dizinin indeksleri üzerinde yineleme yapmak için, "foreach my $i (0 .. $#array) {}" kullanın.
"foreach my $v (@array) {}" değerler üzerinde yinelenir.
· Perl, "if", "while", "foreach" vb.den sonra gelen kaşlı ayraçlar gerektirir.
· Perl'de "else if", "elsif" olarak yazılır.
· "? :" atamadan daha yüksek önceliğe sahiptir. JavaScript'te şunlar yazılabilir:
şart ? do_something() : değişken = 3
ve değişken yalnızca koşul yanlışsa atanır. Perl'de ihtiyacınız olan
parantez:
$koşul? do_something() : ($değişken = 3);
Veya sadece "if" kullanın.
· Perl, ifadeleri ayırmak için noktalı virgül gerektirir.
· "my" ile tanımlanan değişkenler sadece kodu etkiler sonra Deklarasyon. yazamazsın
"$x = 1; benim $x'im;" ve ilk atamanın aynı değişkeni etkilemesini bekleyin. O olacak
bunun yerine, daha önce bir dış kapsamda bildirilen bir $x'e veya bir global
değişkeni.
Değişkenin aşağıdakine kadar görünür olmadığına da dikkat edin: ifade. Bu şu anlama gelir
"benim $x = 1 + $x" içinde ikinci $x daha önce bildirilene atıfta bulunur.
· "my" değişkenleri geçerli fonksiyona değil, geçerli bloğa göre kapsamlandırılır. Eğer sen
"{my $x;} $x;" yazın, ikinci $x, içinde bildirilene atıfta bulunmaz
engellemek.
· Bir nesnenin üyeleri değişkenler olarak erişilebilir hale getirilemez. En yakın Perl
"with(object) { method() }" ile eşdeğer, nesneye $_ takma adı verebilen "for"dur:
için ($nesne) {
$_->yöntem;
}
· Üzerinde bir yöntemin çağrıldığı nesne veya sınıf, yöntemin nesnelerinden biri olarak iletilir.
bağımsız değişkenler, ayrı bir "bu" değer olarak değil.
Sed Tuzaklar
Terbiyeli susuzluk programcılar aşağıdakilere dikkat etmelidir:
· Bir Perl programı, her giriş satırı için bir kez değil, yalnızca bir kez yürütülür. yapabilirsin
"-n" veya "-p" ile örtük döngü.
· İkamelerdeki geri referanslar "\" yerine "$" kullanır.
· "(", ")" ve "|" metakarakterleriyle eşleşen kalıp ters eğik çizgi yok
ön.
· Aralık operatörü virgül yerine "..." şeklindedir.
Kabuk Tuzaklar
Sharp Shell programcıları aşağıdakilere dikkat etmelidir:
· Backtick operatörü, varlığına bakılmaksızın değişken enterpolasyon yapar.
komutta tek tırnak.
· Geri tepme operatörü, farklı olarak, dönüş değerinin çevirisini yapmaz. csh.
· Kabuklar (özellikle csh) her komut satırında birkaç seviye değiştirme yapın. Perl
sadece çift tırnak, ters tırnak, açı gibi belirli yapılarda ikame yapar
parantezler ve arama kalıpları.
· Kabuklar komut dosyalarını bir seferde biraz yorumlar. Perl tüm programı derler
çalıştırmadan önce (derleme zamanında yürütülen "BEGIN" blokları hariç).
· Argümanlar $$, $1, vb. değil @ARGV aracılığıyla kullanılabilir.
· Ortam otomatik olarak ayrı skaler değişkenler olarak kullanıma sunulmaz.
· Kabuğun "testi", dize karşılaştırmaları için "=", "!=", "<" vb. kullanır ve "-eq", "-ne",
Sayısal karşılaştırmalar için "-lt" vb. Bu, "eq", "ne" kullanan Perl'in tersidir,
Dize karşılaştırmaları için "lt" ve sayısal karşılaştırmalar için "==", "!=" "<" vb.
Perl Tuzaklar
Pratik Perl Programcıları aşağıdakilere dikkat etmelidir:
· Birçok işlemin bir liste bağlamında, bir liste bağlamında olduğundan farklı davrandığını unutmayın.
skaler bir. Ayrıntılar için perldata'ya bakın.
· Mümkünse, özellikle küçük harflerden oluşan tüm açık sözcüklerden kaçının. Sadece söyleyemezsiniz
bareword'ün bir fonksiyon mu yoksa bir dizge mi olduğuna bakmak. üzerinde tırnak kullanarak
işlev çağrılarında dizeleri ve parantezleri kullanırsanız, onları asla karıştırmazsınız.
· Hangi yerleşiklerin tekli operatörler olduğunu yalnızca incelemeden ayırt edemezsiniz (örn.
kesmek() ve chdir()) ve liste operatörleridir (gibi Yazdır() ve bağlantıyı kaldır()). (Meğer ki
prototiplenmiş, kullanıcı tanımlı alt programlar bir tek liste operatörleri olun, asla tekli olanlar değil.)
Perlop ve perlsub'a bakın.
· İnsanlar, bazı işlevlerin varsayılan olarak $_ veya @ARGV olarak ayarlandığını veya
her neyse, ama bu sizin beklemediğiniz diğer kişiler değil.
· NS yapı, kütükbelirteci adı değil, üzerinde bir okuma satırı işlemidir.
bu kolu. Okunan veri, yalnızca okunan dosya tek dosyaysa $_ öğesine atanır.
while döngüsündeki koşul:
süre ( ) { }
while (tanımlı($_ = )) { }..
; # veri atıldı!
· "=~"ye ihtiyacınız olduğunda "=" kullanmamayı unutmayın; bu iki yapı oldukça farklıdır:
$x = /foo/;
$x =~ /foo/;
· "do {}" yapısı, üzerinde döngü kontrolünü kullanabileceğiniz gerçek bir döngü değildir.
· Elinizden geldiğince yerel değişkenler için "my()" kullanın (ancak performans için bkz.
nerede yapamazsın). "local()" kullanmak aslında global bir değişkene yerel bir değer verir,
bu da sizi dinamik kapsam belirlemenin öngörülemeyen yan etkilerine açık bırakır.
· Bir modülde dışa aktarılan bir değişkeni yerelleştirirseniz, dışa aktarılan değeri değişmez.
Yerel ad, yeni bir değerin diğer adı olur, ancak harici ad hala bir diğer addır
orijinal için.
Her zaman olduğu gibi, bunlardan herhangi biri resmi olarak hata olarak ilan edilirse düzeltilecek ve
çıkarıldı.
onworks.net hizmetlerini kullanarak perltrap çevrimiçi kullanın