Output berformat Perl
Perl ialah bahasa pemprosesan data teks yang sangat berkuasa.
Dalam Perl, anda boleh menggunakan format untuk menentukan templat, dan kemudian menggunakan tulis untuk mengeluarkan data mengikut templat yang ditentukan.
Sintaks definisi pemformatan Perl adalah seperti berikut:
format FormatName = fieldline value_one, value_two, value_three fieldline value_one, value_two .
Analisis parameter:
FormatName: Nama format.
garisan medan: Baris format yang digunakan untuk menentukan format baris output, dengan aksara seperti @,^,<,>,|.
value_one, value_two...: Baris data, digunakan untuk memasukkan nilai ke dalam baris format sebelumnya, semuanya adalah pembolehubah perl.
.: simbol tamat.
Berikut ialah contoh pemformatan mudah:
#!/usr/bin/perl $text = "google php taobao"; format STDOUT = first: ^<<<<< # 左边对齐,字符长度为6 $text second: ^<<<<< # 左边对齐,字符长度为6 $text third: ^<<<< # 左边对齐,字符长度为5,taobao 最后一个 o 被截断 $text . write
Hasil keluaran untuk melaksanakan contoh di atas ialah:
first: google second: php third: taoba
Format baris (garis grafik) sintaks
Formatkan baris bermula dengan @ atau ^, baris ini tidak melakukan sebarang bentuk penggantian pembolehubah.
@ medan (jangan dikelirukan dengan simbol tatasusunan @) ialah medan biasa.
@,^ Panjang <, >,| menentukan panjang medan Jika pembolehubah melebihi panjang yang ditentukan, ia akan dipotong.
<, >,| juga mewakili penjajaran kiri, penjajaran kanan dan penjajaran tengah. Medan
^ digunakan untuk mengisi blok teks berbilang baris.
Format medan nilai
Format medan nilai adalah seperti yang ditunjukkan dalam jadual berikut:
格式 | 值域含义 |
---|---|
@<<< | 左对齐输出 |
@>>> | 右对齐输出 |
@||| | 中对齐输出 |
@##.## | 固定精度数字 |
@* | 多行文本 |
Aksara pertama bagi setiap medan nilai ialah aksara pengisi baris Apabila aksara @ digunakan, tiada pemformatan teks dilakukan.
Dalam jadual di atas, kecuali medan nilai berbilang baris @*, lebar medan adalah sama dengan bilangan aksara yang ditentukan termasuk aksara @ Contohnya:
@###.##
bermaksud tujuh aksara lebar , empat titik perpuluhan sebelum dan dua titik perpuluhan selepas.
Contohnya adalah seperti berikut:
#!/usr/bin/perl format EMPLOYEE = =================================== @<<<<<<<<<<<<<<<<<<<<<< @<< $name $age @#####.## $salary =================================== . select(STDOUT); $~ = EMPLOYEE; @n = ("Ali", "php", "Jaffer"); @a = (20,30, 40); @s = (2000.00, 2500.00, 4000.000); $i = 0; foreach (@n){ $name = $_; $age = $a[$i]; $salary = $s[$i++]; write; }
Hasil keluaran contoh di atas ialah:
=================================== Ali 20 2000.00 =================================== =================================== php 30 2500.00 =================================== =================================== Jaffer 40 4000.00 ===================================
Pembolehubah format
$~ ($ FORMAT_NAME): nama format $^ ($FORMAT_TOP_NAME): Nama format pengepala semasa disimpan dalam
$% ($FORMAT_PAGE_NUMBER): Nombor halaman output semasa
$= ($FORMAT_LINES_PER_PAGE): Bilangan baris dalam setiap halaman
$| ($FORMAT_AUTOFLUSH): Sama ada hendak memuat semula storan penimbal output secara automatik
-
$^L ($FORMAT_FORMFEED): Rentetan yang perlu dikeluarkan sebelum pengepala setiap halaman (kecuali halaman pertama) disimpan dalam
Berikut adalah ringkas cara menggunakan $~ Contoh pemformatan:
#!/usr/bin/perl $~ = "MYFORMAT"; # 指定缺省文件变量下所使用的格式 write; # 输出 $~ 所指定的格式 format MYFORMAT = # 定义格式 MYFORMAT ================================= Text # php中文网 ================================= . write;
Hasil keluaran untuk melaksanakan contoh di atas ialah:
================================= Text # php中文网 ================================= ================================= Text # php中文网 =================================
Jika $~ tidak dinyatakan, format bernama STDOUT akan menjadi output:
#!/usr/bin/perl write; # 不指定$~的情况下会寻找名为STDOUT的格式 format STDOUT = ~用~号指定的文字不会被输出 ---------------- STDOUT格式 ---------------- .
Hasil output melaksanakan contoh di atas ialah:
---------------- STDOUT格式 ----------------
Dalam contoh berikut, kami menunjukkan penggunaan pembolehubah $^ atau $FORMAT_TOP_NAME dengan menambah maklumat pengepala laporan:
#!/usr/bin/perl format EMPLOYEE = =================================== @<<<<<<<<<<<<<<<<<<<<<< @<< $name $age @#####.## $salary =================================== . format EMPLOYEE_TOP = =================================== Name Age =================================== . select(STDOUT); $~ = EMPLOYEE; $^ = EMPLOYEE_TOP; @n = ("Ali", "php", "Jaffer"); @a = (20,30, 40); @s = (2000.00, 2500.00, 4000.000); $i = 0; foreach (@n){ $name = $_; $age = $a[$i]; $salary = $s[$i++]; write; }
Hasil keluaran contoh di atas ialah:
=================================== Name Age =================================== =================================== Ali 20 2000.00 =================================== =================================== php 30 2500.00 =================================== =================================== Jaffer 40 4000.00 ===================================
Kita juga boleh menggunakan $% atau $FORMAT_PAGE_NUMBER untuk menetapkan paging untuk laporan:
#!/usr/bin/perl format EMPLOYEE = =================================== @<<<<<<<<<<<<<<<<<<<<<< @<< $name $age @#####.## $salary =================================== . # 添加分页 $% format EMPLOYEE_TOP = =================================== Name Age Page @< $% =================================== . select(STDOUT); $~ = EMPLOYEE; $^ = EMPLOYEE_TOP; @n = ("Ali", "php", "Jaffer"); @a = (20,30, 40); @s = (2000.00, 2500.00, 4000.000); $i = 0; foreach (@n){ $name = $_; $age = $a[$i]; $salary = $s[$i++]; write; }
Hasil output contoh di atas ialah:
=================================== Name Age Page 1 =================================== =================================== Ali 20 2000.00 =================================== =================================== php 30 2500.00 =================================== =================================== Jaffer 40 4000.00 ===================================
Output ke fail lain
Secara lalai, fungsi tulis mengeluarkan hasil kepada fail output standard STDOUT. Kaedah yang paling mudah ialah menghantar pembolehubah fail sebagai parameter untuk ditulis, seperti:
write(MYFILE);
Kod di atas menulis output kepada fail MYFILE menggunakan format pencetakan lalai bernama MYFILE.
Tetapi dengan cara ini anda tidak boleh menggunakan pembolehubah $~ untuk menukar format cetakan yang digunakan. Pembolehubah sistem $~ hanya mempengaruhi pembolehubah fail lalai Kita boleh menukar pembolehubah fail lalai, menukar $~, dan kemudian memanggil tulis.
#!/usr/bin/perl if (open(MYFILE, ">tmp")) { $~ = "MYFORMAT"; write MYFILE; # 含文件变量的输出,此时会打印与变量同名的格式,即MYFILE。$~里指定的值被忽略。 format MYFILE = # 与文件变量同名 ================================= 输入到文件中 ================================= . close MYFILE; }
Selepas pelaksanaan berjaya, kita boleh melihat kandungan fail tmp seperti yang ditunjukkan di bawah:
$ cat tmp ================================= 输入到文件中 =================================
Apabila kita boleh menggunakan pilih untuk menukar pembolehubah fail lalai, ia mengembalikan perwakilan dalaman bagi pembolehubah fail lalai semasa, Dengan cara ini, kita boleh mencipta subrutin dan mengeluarkannya mengikut idea kita sendiri tanpa menjejaskan bahagian lain program.
#!/usr/bin/perl if (open(MYFILE, ">>tmp")) { select (MYFILE); # 使得默认文件变量的打印输出到MYFILE中 $~ = "OTHER"; write; # 默认文件变量,打印到select指定的文件中,必使用$~指定的格式 OTHER format OTHER = ================================= 使用定义的格式输入到文件中 ================================= . close MYFILE; }
Selepas pelaksanaan berjaya, kita boleh melihat kandungan fail tmp, seperti yang ditunjukkan di bawah:
$ cat tmp ================================= 输入到文件中 ================================= ================================= 使用定义的格式输入到文件中 =================================