Appearance
Builtin operators and functions trong Perl
Đây là phần ghi chú kiến thức mình học được khi làm việc với Perl: ngôn ngữ có sẵn rất nhiều hàm/toán tử, nhưng cần dùng đúng loại theo ngữ cảnh (số hay chuỗi) để không tạo bug khó thấy.
Bài này tóm tắt đúng nhóm toán tử phổ biến từ tài liệu và thêm ví dụ thực tế để bạn dùng an toàn hơn.
1. Builtin functions: bắt đầu từ perldoc -f
Perl có sẵn nhiều hàm như print, sort, reverse...
Khi quên cách dùng một hàm, tra cứu nhanh:
bash
perldoc -f print
perldoc -f sort
perldoc -f reverseThói quen này giúp bạn đọc đúng behavior chuẩn thay vì đoán theo ngôn ngữ khác.
2. Toán học (Arithmetic)
Các toán tử cơ bản:
+cộng-trừ*nhân/chia
Ví dụ:
perl
use strict;
use warnings;
my $a = 10;
my $b = 3;
print $a + $b, "\n"; # 13
print $a - $b, "\n"; # 7
print $a * $b, "\n"; # 30
print $a / $b, "\n"; # 3.3333...3. So sánh số (Numeric comparison)
Nhóm cho kiểu số:
==bằng!=khác<nhỏ hơn>lớn hơn<=nhỏ hơn hoặc bằng>=lớn hơn hoặc bằng
Ví dụ:
perl
my $x = 100;
my $y = 99;
print "equal\n" if $x == $y;
print "x lớn hơn y\n" if $x > $y;4. So sánh chuỗi (String comparison)
Nhóm cho chuỗi:
eqbằngnekhácltnhỏ hơngtlớn hơnlenhỏ hơn hoặc bằnggelớn hơn hoặc bằng
Ví dụ:
perl
my $s1 = "9";
my $s2 = "10";
print "string: s1 > s2\n" if $s1 gt $s2; # đúng theo thứ tự từ điển
print "number: s1 < s2\n" if $s1 < $s2; # đúng theo số họcVì sao Perl tách riêng số và chuỗi?
Kinh nghiệm thực tế: Perl cần biết bạn muốn so sánh kiểu nào:
- numeric:
99 < 100là đúng. - alphabetic/string:
"100"có thể đứng trước"99"theo thứ tự từ điển.
Đây là nguồn bug rất phổ biến khi xử lý input từ file/API vì nhiều giá trị đến dưới dạng chuỗi.
5. Logic boolean
Nhóm C-style:
&&and||or!not
Perl cũng có dạng chữ:
andornot
Lưu ý quan trọng: and/or/not có precedence khác &&/||/!.
Ví dụ dễ dính bug:
perl
my $ok = 0;
$ok = 1 || 0; # $ok = 1
$ok = 1 or 0; # vẫn 1, nhưng cách parse expression khácKhi viết biểu thức phức tạp, ưu tiên thêm ngoặc để rõ ý định.
6. Nhóm miscellaneous dùng hàng ngày
=gán.nối chuỗixlặp chuỗi..tạo range
Ví dụ:
perl
my $name = "Thanh";
my $line = "=" x 20;
print "Hello, " . $name . "\n";
print $line, "\n";
my @nums = (1 .. 5); # (1,2,3,4,5)
my @chars = ('a' .. 'e'); # (a,b,c,d,e)7. Toán tử kết hợp với = (compound assignment)
Perl cho phép viết ngắn:
$x += 1thay cho$x = $x + 1$x -= 1thay cho$x = $x - 1$s .= "\n"thay cho$s = $s . "\n"
Ví dụ:
perl
my $count = 0;
$count += 2; # 2
$count -= 1; # 1
my $msg = "hello";
$msg .= " perl";
print "$msg\n"; # hello perlChecklist dùng operator an toàn
- So sánh số: dùng
==,!=,<,>... - So sánh chuỗi: dùng
eq,ne,lt,gt... - Biểu thức boolean dài: thêm ngoặc để tránh lỗi precedence.
- Khi không chắc hàm builtin: tra
perldoc -f <function>.
Kết luận
Nắm chắc nhóm operator builtin là nền tảng để đọc/viết Perl nhanh và ít lỗi.
Nếu phải nhớ một điều duy nhất: đừng trộn so sánh số và so sánh chuỗi. Chỉ riêng việc này đã giúp bạn tránh được nhiều bug ngầm trong script production.
