Bagaimana cara membandingkan dua string dalam Perl?
Saya belajar Perl, saya punya pertanyaan mendasar mencarinya di sini di StackOverflow dan tidak menemukan jawaban yang baik jadi saya pikir saya akan bertanya.
Bagaimana cara membandingkan dua string dalam Perl?
Saya belajar Perl, saya punya pertanyaan mendasar mencarinya di sini di StackOverflow dan tidak menemukan jawaban yang baik jadi saya pikir saya akan bertanya.
Jawaban:
Lihat perlop perldoc . Gunakan
lt
,gt
,eq
,ne
, dancmp
sesuai untuk perbandingan string:sumber
index
untuk melihat apakah string adalah substring dari yang lain.!=
danne
tidak sama, karena!=
danne
didefinisikan berbeda. Seberapa keras itu ?! Menjadi operator perbandingan numerik,!=
mengubah kedua operan menjadi angkaperl -E 'say "equal" if not "a" != "b"'
.cmp
Membandingkaneq
Sama denganne
Tidak sebanding denganlt
Kurang darile
Kurang dari atau sama dengangt
Lebih besar darige
Lebih dari atau sama denganLihat
perldoc perlop
untuk informasi lebih lanjut.(Saya menyederhanakan ini sedikit tetapi
cmp
mengembalikan nilai yang merupakan string kosong, dan bukan nilai numerik nol0
, dan nilai yang merupakan string'1'
dan nilai numerik1
. Ini adalah nilai yang sama dengan yang Anda inginkan selalu dapatkan dari operator boolean di Perl. Anda seharusnya hanya menggunakan nilai pengembalian untuk operasi boolean atau numerik, dalam hal ini perbedaannya tidak terlalu penting.)sumber
eq
,gt
,lt
dll tidak benar ... Mereka kembali benar atau salah. Hanyacmp
mengembalikan nilai numerik tertentu.leg
bukannyacmp
yang digunakan untuk perbandingan generik.Selain Sinan Ünür daftar komprehensif operator perbandingan string, Perl 5.10 menambahkan operator pertandingan pintar.
Operator kecocokan pintar membandingkan dua item berdasarkan jenisnya. Lihat grafik di bawah ini untuk perilaku 5.10 (saya percaya perilaku ini sedikit berubah di 5.10.1):
perldoc perlsyn
"Pencocokan pintar secara detail" :sumber
Perl memiliki perbandingan string terpisah dan operator perbandingan numerik untuk membantu pengetikan longgar dalam bahasa. Anda harus membaca perlop untuk semua operator yang berbeda.
sumber
Subteks yang jelas dari pertanyaan ini adalah:
Perl tidak memiliki tipe data yang berbeda untuk teks vs angka. Keduanya diwakili oleh tipe "skalar" . Dengan kata lain, string adalah angka jika Anda menggunakannya .
Karena teks dan angka tidak dibedakan berdasarkan bahasa, kami tidak bisa begitu saja membebani
==
operator untuk melakukan hal yang benar untuk kedua kasus. Oleh karena itu, Perl menyediakaneq
untuk membandingkan nilai sebagai teks:Pendeknya:
==
atau!=
, untuk membandingkan dua operan sebagai angkaeq
ataune
, untuk membandingkan dua operan sebagai teksAda banyak fungsi dan operator lain yang dapat digunakan untuk membandingkan nilai skalar, tetapi mengetahui perbedaan antara kedua bentuk ini merupakan langkah pertama yang penting.
sumber
Dan jika Anda ingin mengekstraksi perbedaan antara kedua string, Anda dapat menggunakan String :: Diff .
sumber