Saya terus mencetak hash saya sebagai # kotak / # yang dialokasikan. Bagaimana cara mencetak konten hash saya?
Tanpa menggunakan while
perulangan akan lebih disukai (misalnya, satu-liner akan lebih baik).
Saya terus mencetak hash saya sebagai # kotak / # yang dialokasikan. Bagaimana cara mencetak konten hash saya?
Tanpa menggunakan while
perulangan akan lebih disukai (misalnya, satu-liner akan lebih baik).
Data :: Dumper adalah teman Anda.
use Data::Dumper;
my %hash = ('abc' => 123, 'def' => [4,5,6]);
print Dumper(\%hash);
akan menampilkan
$VAR1 = {
'def' => [
4,
5,
6
],
'abc' => 123
};
&
operator di C dan C ++. Alasan penting dalam konteks ini adalah bahwa di Perl, jika Anda memanggil fungsi dengan nilai hash sebagai argumen, nilai hash akan didaftar dan diperluas menjadi beberapa argumen - jadi%hsh=("a" => 1, "b" => 2); foo(%hsh);
akan sama denganfoo("a", 1, "b", 2)
. Jika Anda menginginkan fungsi untuk beroperasi pada hash itu sendiri, Anda perlu memberikan referensi ke hash:foo(\%hsh);
Lihat perldoc.perl.org/perlsub.html#Pass-by-ReferenceMudah:
Elegan, tapi sebenarnya 30% lebih lambat (!):
sumber
print "$_ $h{$_}\n" for (keys %h);
,$k
tidak ada dalam contoh itu.for
loop lebih cepat daripadawhile
hingga setidaknya 10.000 kunci: gist.github.com/151792Di sini bagaimana Anda dapat mencetak tanpa menggunakan
Data::Dumper
sumber
Untuk keperluan debugging, saya akan sering menggunakan
YAML
.Hasil dalam:
Lain kali saya akan menggunakan
Data::Dump
. Anda tidak perlu mengatur sebanyak mungkin variabel untuk mengeluarkannya dalam format yang bagus daripada yang Anda lakukanData::Dumper
.Baru-baru ini saya telah menggunakan
Data::Printer
untuk debugging.(Hasilnya bisa jauh lebih berwarna di terminal)
Berbeda dengan contoh-contoh lain yang telah saya perlihatkan di sini, yang ini dirancang secara eksplisit hanya untuk tujuan tampilan. Yang muncul lebih mudah jika Anda membuang struktur variabel terikat atau objek.
sumber
=>
seperti yang Anda harapkan. Alih-alih itu selalu mencetak kunci, beberapa spasi, dan kemudian nilainya. Yang membantu pemindaian manusia atas output.Jawabannya tergantung pada apa yang ada di hash Anda. Jika Anda memiliki hash sederhana, sederhana
atau
akan dilakukan, tetapi jika Anda memiliki hash yang diisi dengan referensi Anda akan sesuatu yang bisa berjalan referensi tersebut dan menghasilkan output yang masuk akal. Referensi berjalan ini biasanya disebut serialisasi. Ada banyak modul yang menerapkan gaya yang berbeda, beberapa yang lebih populer adalah:
Data::Dumper
Data::Dump::Streamer
YAML::XS
JSON::XS
XML::Dumper
Karena fakta yang
Data::Dumper
merupakan bagian dari perpustakaan inti Perl, itu mungkin yang paling populer; Namun, beberapa modul lain memiliki hal-hal yang sangat baik untuk ditawarkan.sumber
Favorit saya: Cerdas :: Komentar
Itu dia.
sumber
use
Smart::Comments
, saya melihatnya dari perspektif itu juga. Tetapi bagi penghitung,Smart::Comments
berperilaku cukup baik sebagai modul cakupan , seharusnya tidak ada perilaku keluaran dalam modul apa pun yang tidak juga menggunakan SC. Jadi, masalahnya akan diisolasi untuk lingkup tersebut dengan pernyataan penggunaan . Jika Anda mengatakan bahwa seorang programmer pemeliharaan tidak memiliki tanggung jawab untuk membaca dokumen pada modul yang disertakan, saya tidak bisa setuju. Namun, terima kasih telah berkomentarLooping:
Fungsional
Tapi untuk keanggunan belaka, saya harus memilih wrang-wrang. Untuk kode saya sendiri, saya akan memilih foreach saya. Atau gunakan Dumper tetro.
sumber
foreach
danmap
.map
harus digunakan untuk transformasi daftar, bukan dalam konteks kosong untuk meniru for-loopCara termudah dalam pengalaman saya adalah dengan hanya menggunakan Nilai Dump .
Bekerja seperti pesona dan Anda tidak perlu khawatir tentang memformat hash, karena menghasilkan seperti hash debugger Perl (bagus untuk debugging). Plus, Dumpvalue disertakan dengan set modul Perl, jadi Anda tidak perlu mengacaukan CPAN jika Anda berada di belakang semacam proxy kejam (seperti saya di tempat kerja).
sumber
Jika Anda ingin menjadi orang yang bertele-tele dan menjaganya tetap pada satu baris (tanpa menggunakan statemen dan shebang), maka saya akan menyortir piggy dari jawaban tetromino dan menyarankan:
Tidak melakukan sesuatu yang istimewa selain menggunakan hash anonim untuk melewati variabel temp;)
sumber
Saya menambahkan satu ruang untuk setiap elemen hash untuk melihatnya dengan baik:
sumber
Saya sangat suka mengurutkan kunci dalam satu kode liner:
sumber