Saya baru saja mulai membaca O'Reilly Learning Perl, Edisi 6 dan terkejut ketika saya menemukan kutipan ini.
#!/usr/bin/perl
print "Hello, world!\n";
Bayangkan Anda telah mengetiknya di editor teks Anda. (Jangan khawatir tentang apa arti bagian-bagian itu dan bagaimana mereka bekerja. Anda akan segera melihatnya tentang hal itu.) Anda umumnya dapat menyimpan program itu dengan nama apa pun yang Anda inginkan. Perl tidak memerlukan jenis nama file atau ekstensi khusus, dan lebih baik tidak menggunakan ekstensi sama sekali.
Mengapa lebih baik tidak memiliki ekstensi? Bayangkan bahwa Anda telah menulis sebuah program untuk menghitung skor bowling dan Anda telah memberi tahu semua teman Anda bahwa itu disebut bowling.plx. Suatu hari Anda memutuskan untuk menulis ulang dalam C. Apakah Anda masih menyebutnya dengan nama yang sama, menyiratkan bahwa itu masih ditulis dalam Perl? Atau apakah Anda memberi tahu semua orang bahwa itu memiliki nama baru? (Dan jangan menyebutnya bowling. C, kumohon!) Jawabannya adalah bukan urusan mereka bahasa apa yang digunakan, jika mereka hanya menggunakannya. Jadi itu seharusnya disebut bowling.
Ini adalah satu-satunya sumber yang saya lihat dengan tampilan ini, semua yang saya baca telah mendukung ekstensi .pl. Saya belum menjadi programmer Perl, dan saya ingin tahu apa pandangan masyarakat tentang ini sebelum saya terbiasa.
.pl
ekstensi untuk program yang ingin saya distribusikan (informasi itu berisik, bukan sinyal), tapi ini pengingat yang berguna untuk skrip lokal. Bagaimanapun, diskusi ini tidak relevan untuk> 90% dari kode Perl karena itu baik dalam modul (.pm
ekstensi diperlukan) atau tes (.t
ekstensi adat).#!/usr/bin/env perl
sebagai skrip Perl jika file tersebut tidak memiliki ekstensi yang bertentangan (seperti.cpp
). Thefile
Program (digunakan untuk menyimpulkan jenis MIME untuk masukan yang diberikan) dengan benar menyimpulkantext/x-perl
tanpa ekstensi.Jawaban:
Saran dalam buku ini benar-benar valid - setidaknya untuk sistem mirip UNIX. Eksekusi skrip dikendalikan oleh
#!
baris, bukan oleh bagian ekstensi dari nama file. Menggunakan ekstensi khusus untuk skrip Perl memperlihatkan informasi yang seharusnya tidak penting bagi siapa pun yang menjalankan skrip.Windows adalah masalah yang berbeda. Windows tidak mendukung
#!
mekanisme; sebaliknya, metode yang digunakan untuk membuka file tergantung pada ekstensi. Misalnya, shell Windows mungkin dikonfigurasikan sehingga mengklik dua kali pada.pl
file (atau menjalankannya dari prompt) akan memberikannya sebagai argumen kepada penerjemah Perl. Menginstal sistem Perl mungkin akan mengaturnya untuk Anda secara otomatis.Untuk skrip Perl yang dimaksudkan untuk portable,
.pl
akhiran yang dibutuhkan oleh Windows mungkin "bocor" ke sistem mirip UNIX. Mungkin sebaiknya memiliki metode instalasi khusus sistem yang memilih nama yang sesuai untuk skrip saat diinstal.Pada UNIX-seperti sistem, sebuah
.pl
ekstensi sebagian besar tidak berbahaya, dan jika Anda merasa berguna sebagai pengingat bahasa apa yang digunakan oleh script tertentu (mungkin Anda memiliki koleksi.pl
,.py
,.sh
, dan.rb
script), maka Anda bisa melakukan itu. Tetapi ada beberapa kelemahan dari pendekatan itu, seperti dijelaskan dalam buku ini: jika Anda menerapkan kembali skrip dalam bahasa yang berbeda, Anda harus mengubah nama dan memperbarui apa pun yang menyebutnya.( Modul Perl perlu memiliki
.pm
ekstensi agar Perl dapat menemukannya. Misalnya, ini:akan menyebabkan penerjemah untuk mencari file yang bernama
Bar.pm
dalam direktori aa bernama diFoo
bawah salah satu direktori yang tercantum dalam@INC
array. Tetapi.pm
file tidak dimaksudkan untuk dieksekusi secara langsung.)Saya menemukan itu mengejutkan. Sebagian besar saran yang saya lihat mengatakan untuk tidak menggunakan
.pl
ekstensi untuk skrip yang dapat dieksekusi.sumber
Tidak masalah
memberitahu sistem program apa yang digunakan untuk menjalankan kode.
jika Anda mengubahnya menjadi
atau
Anda akan menggunakan juru bahasa yang berbeda.
Memiliki ekstensi benar-benar opsional, dan poin bahwa pengguna tidak perlu tahu bahasa adalah 100% benar dalam banyak kasus.
menjalankan
add 2 3
dan mendapatkan kembali 5 adalah semua yang saya pedulikan (sebagai pengguna).Satu-satunya waktu saya menambahkan ekstensi ke skrip adalah jika saya membutuhkan pengguna akhir (beberapa kali saya sendiri) untuk mengetahui bahasa karena beberapa alasan.
example.sh atau example.pl untuk menunjukkan cara yang berbeda untuk menyelesaikan tugas yang sama.
Semua yang dikatakan, lebih umum untuk tidak memiliki ekstensi, tapi semua rasa.
sumber
Kutipan ini memang memberikan saran yang sangat valid.
Saya juga akan menambahkan, bahwa untuk sistem yang lebih kecil itu cukup sepele untuk pergi dan mengganti nama beberapa file dan / atau string di sana-sini jika berubah pikiran tentang implementasi.
Di sisi lain, tren modern dalam mengembangkan sistem largish menyiratkan memiliki file yang dapat dieksekusi utama tanpa ekstensi sementara semua modul tergantung masih memiliki ekstensi khusus bahasa.
Faktanya, Python membutuhkan ini dengan desain, dan biasanya skrip Python utama (yang tanpa ekstensi dalam nama) hanya beberapa baris bootstrap seluruh aplikasi.
sumber
Semua buku ini memberi tahu Anda bahwa pada Unix, ekstensi file tidak lebih dari sebuah konvensi. Pada kenyataannya, banyak jenis file termasuk dalam kategori ini. File Ruby menggunakan konvensi yang sama sehingga mereka tidak memerlukan ekstensi .rb. Kompiler C hanya perlu kode C yang valid, sehingga Anda dapat menamainya .watoozy jika Anda mau.
Sementara tidak ada pengekangan teknis, ada kendala praktis dari prinsip paling tidak mengejutkan . Pada dasarnya, akan sangat mengejutkan melihat kode ruby dalam file .pl, jadi orang-orang biasanya tidak melakukannya.
Satu-satunya pengecualian pada aturan
Di beberapa aplikasi server, skrip start up dalam file ekstensi-kurang untuk membuatnya lebih mudah untuk memulai aplikasi sebagai layanan. File tersebut terlihat seperti sembarang perintah terkompilasi lainnya dalam hal ini. Selama Anda telah menginstal Perl, ia akan berperilaku seperti itu juga.
sumber
.
sebagai kode sumber C,.cpp
,.cc
,.C
C ++ kode sumber,.o
sebagai file objek untuk diteruskan kepada linker, dan sebagainya. Anda dapat menimpanya dengan opsi baris perintah, tetapi saya sudah jarang menggunakannya sehingga saya tidak ingat apa itu. The.c
ekstensi untuk C file sumber penting. The.pl
ekstensi untuk script Perl executable tidak (setidaknya pada UNIX-seperti sistem).c99
perintah: pubs.opengroup.org/onlinepubs/9699919799/utilities/…Kutipan, dari buku "O'Reilly Learning Perl, Edisi ke-6" adalah sampah. Membandingkan C ke perl tidak sama, untuk permulaan C akan dikompilasi ke biner, yang tidak memiliki ekstensi.
Perl tidak akan dikompilasi sehingga beberapa editor teks akan memerlukan ekstensi untuk mengidentifikasi tipe file.
Sebagai bagian dari praktik terbaik Anda tidak boleh hardcode nama file script lengkap dengan ekstensi di mana saja di sistem Anda, Anda harus selalu menggunakan symlink atau alias tergantung pada sistem operasi Anda.
Di masa depan jika Anda perlu mengubah file asli, Anda hanya perlu mengubah symlink untuk menunjuk ke lokasi baru Anda.
sumber
#!
) sejalan, Anda menyebutkan bahwa Anda bekerja di linux yang hebat .. lain kali Anda menginstal aplikasi dengan manajer paket perhatikan bagaimana ia juga membuat symlink ke direktori bin Anda bukan hanya menulis file langsung kebin
direktori Anda .. setiap heran mengapa./usr/bin
, bukan sebagai symlink; mereka semua diinstal oleh manajer paket sistem. Manajer paket memiliki basis datanya sendiri yang melacak lokasi semua file untuk setiap paket. (Untuk perangkat lunak yang saya buat dari sumber, saya menggunakan symlinks.) Tapi saya tidak yakin apa yang harus dilakukan dengan apakah skrip Perl harus memiliki.pl
ekstensi.