InggrisPerancisSpanyol

favorit OnWorks

kinerja - Online di Cloud

Jalankan perlform di penyedia hosting gratis OnWorks melalui Ubuntu Online, Fedora Online, emulator online Windows, atau emulator online MAC OS

Ini adalah bentuk perintah yang dapat dijalankan di penyedia hosting gratis OnWorks menggunakan salah satu dari beberapa workstation online gratis kami seperti Ubuntu Online, Fedora Online, emulator online Windows atau emulator online MAC OS

PROGRAM:

NAMA


perlform - format Perl

DESKRIPSI


Perl memiliki mekanisme untuk membantu Anda menghasilkan laporan dan bagan sederhana. Untuk memfasilitasi ini,
Perl membantu Anda membuat kode halaman keluaran Anda mendekati tampilannya saat dicetak. Dia
dapat melacak hal-hal seperti berapa banyak baris di halaman, halaman apa yang Anda buka, kapan harus
cetak header halaman, dll. Kata kunci dipinjam dari FORTRAN: format() untuk menyatakan dan
menulis() untuk mengeksekusi; lihat entri mereka di perlfunc. Untungnya, tata letaknya jauh lebih banyak
terbaca, lebih seperti pernyataan PRINT MENGGUNAKAN BASIC. Anggap saja sebagai orang miskin tidak(1).

Format, seperti paket dan subrutin, dideklarasikan daripada dieksekusi, jadi mungkin
terjadi pada setiap titik dalam program Anda. (Biasanya yang terbaik adalah menyimpan semuanya bersama-sama.)
Mereka memiliki namespace sendiri terpisah dari semua "tipe" lainnya di Perl. Ini berarti bahwa
jika Anda memiliki fungsi bernama "Foo", itu tidak sama dengan memiliki format bernama
"Fu". Namun, nama default untuk format yang terkait dengan filehandle yang diberikan adalah
sama dengan nama filehandle. Dengan demikian, format default untuk STDOUT diberi nama
"STDOUT", dan format default untuk filehandle TEMP bernama "TEMP". Mereka hanya melihat
sama. Mereka tidak.

Format record output dideklarasikan sebagai berikut:

format NAMA =
DAFTAR FORMULIR
.

Jika nama dihilangkan, format "STDOUT" akan ditentukan. Tunggal "." di kolom 1 digunakan untuk
mengakhiri format. FORMLIST terdiri dari urutan baris, yang masing-masing dapat menjadi salah satu dari:
tiga jenis:

1. Komentar, ditandai dengan memberi tanda '#' pada kolom pertama.

2. Garis "gambar" yang memberikan format untuk satu saluran keluaran.

3. Baris argumen yang memasok nilai untuk dicolokkan ke baris gambar sebelumnya.

Garis gambar berisi definisi bidang keluaran, bercampur dengan teks literal. Ini
garis tidak mengalami interpolasi variabel apa pun. Definisi bidang dibuat
dari sekumpulan karakter, untuk memulai dan memperluas bidang ke lebar yang diinginkan. Ini adalah
set lengkap karakter untuk definisi bidang:

@ mulai dari lapangan reguler
^ awal bidang khusus
< karakter pad untuk justifikasi kiri
| karakter pad untuk pemusatan
> karakter pad untuk pembenaran yang tepat
# karakter pad untuk bidang numerik rata kanan
0 alih-alih # pertama: nomor pad dengan nol di depan
. titik desimal dalam bidang numerik
... mengakhiri bidang teks, tunjukkan "..." sebagai bukti pemotongan
@* bidang lebar variabel untuk nilai multi-baris
^* bidang lebar variabel untuk baris berikutnya dari nilai multi-baris
~ tekan baris dengan semua bidang kosong
~~ ulangi baris sampai semua bidang habis

Setiap bidang dalam garis gambar dimulai dengan "@" (at) atau "^" (tanda sisipan), yang menunjukkan apa
kita akan memanggil, masing-masing, bidang "biasa" atau "khusus". Pilihan karakter pad
menentukan apakah suatu bidang tekstual atau numerik. Operator tilde bukan bagian dari a
bidang. Mari kita lihat berbagai kemungkinan secara detail.

Teks Fields
Panjang bidang disediakan dengan mengisi bidang dengan beberapa "<", ">", atau
"|" karakter untuk menentukan bidang non-numerik dengan, masing-masing, justifikasi kiri,
pembenaran yang benar, atau pemusatan. Untuk bidang reguler, nilainya (hingga yang pertama
baris baru) diambil dan dicetak sesuai dengan justifikasi yang dipilih, memotong kelebihan
karakter. Jika Anda mengakhiri bidang teks dengan "...", tiga titik akan ditampilkan jika
nilai terpotong. Bidang teks khusus dapat digunakan untuk melakukan teks multi-baris yang belum sempurna
pengisian blok; lihat "Menggunakan Mode Isi" untuk detailnya.

Contoh:
format STDOUT =
@<<<<<< @||||| @>>>>>>>
"kiri", "tengah", "kanan"
.
Keluaran:
kiri tengah kanan

Numeric Fields
Menggunakan "#" sebagai karakter pengisi menentukan bidang numerik, dengan justifikasi yang tepat. NS
opsional "." menentukan posisi titik desimal. Dengan "0" (nol) alih-alih
pertama "#", nomor yang diformat akan diisi dengan nol di depan jika perlu. A
bidang numerik khusus dikosongkan jika nilainya tidak ditentukan. Jika nilai yang dihasilkan
akan melebihi lebar yang ditentukan, bidang diisi dengan "#" sebagai bukti luapan.

Contoh:
format STDOUT =
@### @.### @##.### @### @### ^####
42, 3.1415, undef, 0, 10000, undef
.
Keluaran:
42 3.142 0.000 0 ####

Bidang @* untuk Variabel-Lebar Multi-baris Teks
Bidang "@*" dapat digunakan untuk mencetak nilai multi-baris dan tidak terpotong; seharusnya (tapi
tidak perlu) muncul dengan sendirinya pada sebuah garis. Umpan baris terakhir dipotong, tetapi yang lainnya
karakter yang dipancarkan kata demi kata.

Bidang ^* untuk Variabel-Lebar Satu baris pada satu waktu Teks
Seperti "@*", ini adalah bidang lebar variabel. Nilai yang diberikan harus berupa variabel skalar.
Perl menempatkan baris pertama (hingga "\n") pertama dari teks ke dalam bidang, dan kemudian memotong
dari bagian depan string sehingga lain kali variabel direferensikan, lebih dari
teks dapat dicetak. Variabel akan tidak dipulihkan.

Contoh:
$teks = "baris 1\nbaris 2\nbaris 3";
format STDOUT =
Teks: ^*
$teks
~~ ^^
$teks
.
Keluaran:
Teks: baris 1
baris 2
baris 3

Menentukan Nilai - Nilai
Nilai ditentukan pada baris format berikut dalam urutan yang sama seperti gambar
bidang. Ekspresi yang memberikan nilai harus dipisahkan dengan koma. Mereka semua
dievaluasi dalam konteks daftar sebelum baris diproses, jadi ekspresi daftar tunggal
bisa menghasilkan beberapa elemen daftar. Ekspresi dapat tersebar ke lebih dari satu
garis jika diapit oleh kurung kurawal. Jika demikian, kurung kurawal harus menjadi tanda pertama pada tanda pertama
garis. Jika ekspresi mengevaluasi ke angka dengan bagian desimal, dan jika
gambar yang sesuai menentukan bahwa bagian desimal akan muncul di output (bahwa
adalah, gambar apa pun kecuali beberapa karakter "#" tanpa tertanam "."), karakter
digunakan untuk titik desimal ditentukan oleh lokal LC_NUMERIC saat ini jika "gunakan lokal"
sedang berlaku. Ini berarti bahwa, jika, misalnya, lingkungan run-time terjadi pada
tentukan lokal Jerman, "," akan digunakan sebagai ganti default ".". Lihat perlocale dan
"PERINGATAN" untuk informasi lebih lanjut.

Menggunakan Mengisi mode
Pada bidang teks tanda sisipan mengaktifkan semacam mode isian. Alih-alih ekspresi sewenang-wenang,
nilai yang diberikan harus berupa variabel skalar yang berisi string teks. Perl menempatkan
bagian berikutnya dari teks ke dalam bidang, dan kemudian memotong bagian depan string jadi
bahwa pada saat variabel direferensikan, lebih banyak teks dapat dicetak. (Ya,
ini berarti bahwa variabel itu sendiri diubah selama eksekusi menulis() panggilan, dan
tidak dipulihkan.) Bagian teks berikutnya ditentukan oleh pemutusan baris yang kasar
algoritma. Anda dapat menggunakan karakter carriage return ("\r") untuk memaksa jeda baris. Kamu bisa
ubah karakter mana yang legal untuk dilanggar dengan mengubah variabel $: (itu
$FORMAT_LINE_BREAK_CHARACTERS jika Anda menggunakan modul bahasa Inggris) ke daftar yang diinginkan
karakter.

Biasanya Anda akan menggunakan urutan bidang dalam tumpukan vertikal yang terkait dengan yang sama
variabel skalar untuk mencetak blok teks. Anda mungkin ingin mengakhiri bidang terakhir dengan
teks "...", yang akan muncul di output jika teks terlalu panjang untuk muncul di
keseluruhan.

Menekan Garis Where Semua Fields Adalah Kosong
Menggunakan bidang caret dapat menghasilkan garis di mana semua bidang kosong. Anda dapat menekan seperti itu
baris dengan meletakkan karakter "~" (tilde) di mana saja di baris. Air pasang akan menjadi
diterjemahkan ke spasi pada output.

Mengulangi dibentuk Garis
Jika Anda menempatkan dua karakter tilde yang berdekatan "~~" di mana saja ke dalam satu baris, baris tersebut akan menjadi
diulang sampai semua bidang pada baris habis, yaitu tidak terdefinisi. Untuk spesial
(tanda sisipan) bidang teks ini akan terjadi cepat atau lambat, tetapi jika Anda menggunakan bidang teks at
variasi, ekspresi yang Anda berikan sebaiknya tidak memberikan nilai yang sama setiap saat selamanya!
("shift(@f)" adalah contoh sederhana yang akan berhasil.) Jangan gunakan bidang numerik biasa (at)
di baris seperti itu, karena tidak akan pernah kosong.

Atasan of Bentuk Pengolahan
Pemrosesan top-of-form secara default ditangani oleh format dengan nama yang sama seperti saat ini
filehandle dengan "_TOP" digabungkan dengannya. Ini dipicu di bagian atas setiap halaman. Lihat
"menulis" di perlfunc.

contoh:

# laporan tentang / etc / passwd fillet
format STDOUT_TOP =
File Passwd
Nama Login Office Uid Gid Beranda
-------------------------------------------------- ----------------
.
format STDOUT =
@<<<<<<<<<<<<<<<<<< @|||||| @<<<<<<@>>>> @>>>> @<<<<<<<<<<<<<<<<
$nama, $login, $kantor,$uid,$gid, $rumah
.

# laporan dari formulir laporan bug
format STDOUT_TOP =
Laporan Bug
@<<<<<<<<<<<<<<<<<<<<<< @||| @>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
$sistem, $%, $tanggal
-------------------------------------------------- ----------------
.
format STDOUT =
Subjek: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<
$subjek
Indeks: @<<<<<<<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<
$indeks, $deskripsi
Prioritas: @<<<<<<<<<< Tanggal: @<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <
$prioritas, $tanggal, $deskripsi
Dari: @<<<<<<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<) <<<<<<<<<<
$dari, $deskripsi
Ditugaskan ke: @<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<< <<<<
$programmer, $deskripsi
~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$deskripsi
~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$deskripsi
~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$deskripsi
~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$deskripsi
~ ^<<<<<<<<<<<<<<<<<<<<<<<<...
$deskripsi
.

Hal ini dimungkinkan untuk mencampur mencetak()dengan menulis()s pada saluran keluaran yang sama, tetapi Anda akan
harus menangani sendiri "$-" ($FORMAT_LINES_LEFT).

dibentuk Variabel
Nama format saat ini disimpan dalam variabel $~ ($FORMAT_NAME), dan bagian atas saat ini
nama format formulir dalam $^ ($FORMAT_TOP_NAME). Nomor halaman keluaran saat ini disimpan
dalam $% ($FORMAT_PAGE_NUMBER), dan jumlah baris pada halaman adalah $=
($FORMAT_LINES_PER_PAGE). Apakah output autoflush pada pegangan ini disimpan di $|
($OUTPUT_AUTOFLUSH). Output string sebelum setiap bagian atas halaman (kecuali yang pertama) adalah
disimpan di $^L ($FORMAT_FORMFEED). Variabel-variabel ini diatur berdasarkan per-filehandle, jadi
kamu harus Pilih() menjadi satu yang berbeda untuk mempengaruhi mereka:

pilih((pilih(OUTF),
$~ = "Format_Lainnya_Saya",
$^ = "Format_Atas_Saya"
)[0]);

Cukup jelek, ya? Ini adalah idiom umum, jadi jangan terlalu terkejut ketika Anda melihatnya.
Anda setidaknya dapat menggunakan variabel sementara untuk menahan filehandle sebelumnya: (ini banyak
pendekatan yang lebih baik secara umum, karena tidak hanya keterbacaan meningkat, Anda sekarang memiliki
tahap perantara dalam ekspresi untuk satu langkah debugger melalui):

$ofh = pilih(KELUAR);
$~ = "Format_Lain_Saya";
$^ = "Format_Top_Saya";
pilih($dari);

Jika Anda menggunakan modul bahasa Inggris, Anda bahkan dapat membaca nama variabel:

gunakan Bahasa Inggris;
$ofh = pilih(KELUAR);
$FORMAT_NAME = "Format_Lainnya_Saya";
$FORMAT_TOP_NAME = "Format_Top_Saya";
pilih($dari);

Tapi kamu masih punya yang lucu Pilih()S. Jadi gunakan saja modul FileHandle. Kamu sekarang
dapat mengakses variabel khusus ini menggunakan nama metode huruf kecil sebagai gantinya:

gunakan FileHandle;
format_name OUTF "My_Other_Format";
format_top_name OUTF "Format_Top_Saya";

Jauh lebih baik!

CATATAN


Karena garis nilai mungkin berisi ekspresi arbitrer (untuk bidang, bukan tanda sisipan
bidang), Anda dapat mengolah pemrosesan yang lebih canggih ke fungsi lain, seperti lari cepat()
atau salah satu dari Anda sendiri. Sebagai contoh:

format identitas =
@<<<<<<<<<<<<<<<<
&komfirm($n)
.

Untuk mendapatkan real at atau caret ke lapangan, lakukan ini:

format identitas =
Saya punya @ di sini.
"@"
.

Untuk memusatkan seluruh baris teks, lakukan sesuatu seperti ini:

format identitas =
@||||||||||||||||||||||||||||||||||||||||||||||
"Beberapa baris teks"
.

Tidak ada cara bawaan untuk mengatakan "mengambang ini ke sisi kanan halaman, namun
luasnya." Anda harus menentukan ke mana ia pergi. Orang yang benar-benar putus asa dapat menghasilkan
format sendiri dengan cepat, berdasarkan jumlah kolom saat ini, dan kemudian eval () itu:

$format = "format STDOUT = \n"
. '^' . '<' x $kolom . "\n"
. '$masuk' . "\n"
. "\t^" . "<" x ($kol-8). "~~\n"
. '$masuk' . "\n"
. ".\n";
print $format jika $Debugging;
evaluasi $format;
mati $@ jika $@;

Yang akan menghasilkan format yang terlihat seperti ini:

format STDOUT =
^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<
$entri
^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <~~
$entri
.

Ini sedikit program yang agak mirip fmt(1):

format =
^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ~~
$_

.

$/ = '';
sementara (<>) {
s/\s*\n\s*/ /g;
menulis;
}

Footer
Meskipun $FORMAT_TOP_NAME berisi nama format tajuk saat ini, tidak ada
mekanisme yang sesuai untuk secara otomatis melakukan hal yang sama untuk footer. Tidak tahu bagaimana
besar format akan sampai Anda mengevaluasi itu adalah salah satu masalah utama. Ini aktif
daftar TODO.

Inilah satu strategi: Jika Anda memiliki footer berukuran tetap, Anda bisa mendapatkan footer dengan memeriksa
$FORMAT_LINES_LEFT sebelum masing-masing menulis() dan cetak footer sendiri jika perlu.

Inilah strategi lain: Buka pipa untuk diri Anda sendiri, menggunakan "buka(SELF, "|-")" (lihat "buka"
di perlfunc) dan selalu menulis() ke DIRI SENDIRI alih-alih STDOUT. Minta proses anak Anda
pijat STDIN-nya untuk mengatur ulang header dan footer sesuka Anda. Sangat tidak nyaman,
tapi bisa dilakukan.

Mengakses format Internal
Untuk akses tingkat rendah ke mekanisme pemformatan, Anda dapat menggunakan garis formulir() dan akses $^A
(variabel $ACCUMULATOR) secara langsung.

Sebagai contoh:

$str = formline <<'AKHIR', 1,2,3;
@<<< @||| @>>>
AKHIR

print "Wow, saya baru saja menyimpan '$^A' di akumulator!\n";

Atau untuk membuat tulis() subrutin, yaitu menulis() apa lari cepat() adalah untuk cetakf()Dari
ini:

menggunakan Ikan Mas;
sub menulis {
parau "penggunaan: tulis PICTURE ARGS" kecuali @_;
$format saya = shift;
$^A = "";
formline($format,@_);
kembali $^A;
}

$string = tulis(<<'AKHIR', 1, 2, 3);
Periksa saya
@<<< @||| @>>>
AKHIR
cetak $string;

PERINGATAN


Titik tunggal yang mengakhiri format juga dapat mengakhiri pesan email yang melewati a . sebelum waktunya
mailer Internet yang salah dikonfigurasi (dan berdasarkan pengalaman, kesalahan konfigurasi seperti itu adalah aturannya,
bukan pengecualian). Jadi saat mengirim kode format melalui surat, Anda harus membuat indentasinya begitu
bahwa titik akhir format tidak berada di margin kiri; ini akan mencegah pemutusan SMTP.

Variabel leksikal (dideklarasikan dengan "saya") tidak terlihat dalam format kecuali formatnya
dideklarasikan dalam lingkup variabel leksikal.

Jika lingkungan program menentukan lokal LC_NUMERIC dan "gunakan lokal" berlaku
ketika format dideklarasikan, lokal digunakan untuk menentukan karakter titik desimal di
keluaran yang diformat. Output yang diformat tidak dapat dikontrol oleh "gunakan lokal" pada saat
menulis() disebut. Lihat perlllocale untuk diskusi lebih lanjut tentang penanganan lokal.

Di dalam string yang akan ditampilkan dalam bidang teks dengan panjang tetap, setiap kontrol
karakter diganti dengan spasi. (Tapi ingat arti khusus dari "\r" saat menggunakan
fill mode.) Hal ini dilakukan untuk menghindari misalignment ketika karakter kontrol "menghilang" pada beberapa
media keluaran.

Gunakan perlform online menggunakan layanan onworks.net


Server & Workstation Gratis

Unduh aplikasi Windows & Linux

Perintah Linux

Ad