2011-08-16 22 views
12

Perl'de tek satırlık foreach döngü kullanmak mümkün mü?Perl foreach döngüsünü tek bir satırda yazmak mümkün mü?

$hash{$thing}++ foreach my $thing (@things); 

Ben

die "Invalid file!\n" if (open($Handle, "file.txt")); 

Açık deyimi belki kırık olduğunu biliyoruz, bu gibi diğer birçok komutlarla mümkün olduğunu biliyoruz :) Neredeyse

+0

@Zaid: "satır içi döngü"? Belki sadece ben varım, ama önceki başlığı daha açıklayıcı buldum ...:/ – musiKk

+0

@musiKk: Revize. – Zaid

+0

ikinci ifadenizde: 'if' ifadesini '' '' olarak değiştirin ya da daha sık kullanılan deyimi kullanın (ve 3arg açık ve sözcüksel tutamaç) '$ tutamacıma açın, '<', 'file.txt' ya da die 'Dosya açma hatası: $! ";' 'tabiri kullanmak yerine okumak için '' '' 'yazısını kullanmak istiyorsanız. Kısalıklık ve 'for' için –

cevap

29

. foreach soneki olarak, _ $ kullanmalısınız:

$hash{$_}++ foreach @things; 

Ya eşdeğer (for ve foreach beri sözdizimi için diğer adı):

$hash{$_}++ for @things; 
+1

+1. –

+0

Sadece gönderdikten sonra, ancak hızlı cevap için teşekkürler. Tek bir deyimdeki adlandırılmış değişkenleri anladım. –

+0

işaret edebilir misiniz, bu sözdizimi nerede belgelenmiştir? Perlsyn sayfası buna değmez. – user907860

3

Sen yapabilirsiniz:

foreach my $thing (@things) {$hash{$thing}++}; 

eğer sözlüksel değişkenli bir satırda olmasını istersiniz. foreach'u tersine çeviremezsiniz ve döngü kapsamı değişkenini koruyamazsınız.

+5

"Sen foreach'ı tersine çeviremezsin ve döngüdeğişken değişkenini koruyamazsın." Bu isimle değil, hayır, ama ne? Tek satırlık bir "foreach", adlandırılmış bir topikalize ihtiyaç duymaz. '$ hash {$ _} ++, 'şeyler için', her şey için ** ya da daha fazla İngilizcenin **, onun ** şeylerini aldığını söyler. Unutmayın ki $ _' "o" olarak okumalı. Ve "it", döngü kapsamlı bir değişken olması için * garantili *. Ayrıca, bu sözcük tarafından döngüsel olarak belirlenmiş, yepyeni bir özel değişken olacaktır. ** IFF **, bu isimde (okunan: $ _) mevcut bir sözlüğün halihazırda kapsam dahilindeyse ve aksi durumda dinamik olarak kapsamlandırıldıysa. Her iki yol da hala döngüde. – tchrist

İlgili konular