Di Perl sebagian besar print
pernyataan saya berbentuk
print "hello." . "\n";
Adakah cara yang bagus untuk menghindari menyimpan semua "\ n" yang mengganggu?
Saya tahu saya bisa membuat fungsi baru seperti myprint
yang secara otomatis menambahkan \ n, tapi alangkah baiknya jika saya bisa menimpa yang sudah ada print
.
perldoc perlvar
menjelaskan sebagian besar peringatan, mengapa membahasnya di sini?Jawaban:
Perl 6 memiliki
say
fungsi yang ditambahkan secara otomatis\n
.Anda juga dapat menggunakan
say
di Perl 5.10 atau 5.12 jika Anda menambahkanke awal program Anda. Atau Anda dapat menggunakan Modern :: Perl untuk mendapatkan ini dan fitur lainnya.
Lihat fitur perldoc untuk lebih jelasnya.
sumber
use 5.012;
atauuse 5.010;
mendapatkannya jika Anda menjalankan yang lebih baruperl
.Anda dapat menggunakan
-l
opsi di header she-bang:Keluaran:
sumber
perl
opsi, termasuk apa-l
yang dilakukan, di sini .Jika Perl 5.10+ bukan merupakan pilihan, berikut ini adalah perkiraan cepat dan kotor. Itu tidak persis sama, karena say memiliki beberapa keajaiban ketika arg pertamanya adalah pegangan, tetapi untuk mencetak ke STDOUT:
sumber
Cara Anda menulis pernyataan cetak Anda tidak perlu bertele-tele. Tidak perlu memisahkan baris baru menjadi stringnya sendiri. Ini sudah cukup.
Kesadaran ini mungkin akan membuat pengkodean Anda lebih mudah secara umum.
Selain menggunakan
use feature "say"
atauuse 5.10.0
atauuse Modern::Perl
untuk mendapatkan fitur bawaansay
, saya akan menjadi pimp perl5i yang mengaktifkan banyak fitur Perl 5 yang hilang secara default.sumber
Mungkin Anda ingin mengubah pemisah rekaman output Anda menjadi linefeed dengan:
local $\ = "\n";
Pembaruan: jawaban saya berbicara tentang kemampuan daripada saran. Saya tidak menganggap menambahkan "\ n" di akhir baris sebagai tugas yang "mengganggu", tetapi jika seseorang benar-benar ingin menghindarinya, ini adalah salah satu cara. Jika saya harus mempertahankan sedikit kode yang menggunakan teknik ini, saya mungkin akan memfaktorkan ulangnya terlebih dahulu.
sumber
"helo\r\n"
yang sekarang terkirim"helo\r\n\n"
.local $\ = "\n";
-l
sangat bagus untuk baris perintah satu baris (lihat perldoc.perl.org/perlrun.html#Command-Switches ). Saya tidak akan merekomendasikannya dalam program yang lebih besar.Inilah yang saya temukan di https://perldoc.perl.org/perlvar.html :
contoh:
sumber
Di Perl 6 ada,
say
fungsinyasumber
Jika Anda terjebak dengan pra-5.10, maka solusi yang diberikan di atas tidak akan sepenuhnya mereplikasi
say
fungsi tersebut. Sebagai contohTidak akan berfungsi dengan pemanggilan seperti
atau
... karena fungsi di atas tidak bekerja pada
$_
like global implisitprint
dansay
fungsi sebenarnya .Untuk lebih mereplikasi perl 5.10+
say
Anda menginginkan fungsi iniYang sekarang bertindak seperti ini
The
say
builtin di perl6 berperilaku sedikit yang berbeda. Memanggilnya dengansay @arr
atau@arr.say
tidak hanya akan menggabungkan item array, tetapi mencetaknya secara terpisah dengan pemisah daftar. Untuk mereplikasi ini di perl5 Anda akan melakukan ini$"
adalah variabel pemisah daftar global, atau jika Anda menggunakanEnglish.pm
maka is$LIST_SEPARATOR
Sekarang akan bertindak lebih seperti perl6, seperti itu
sumber