Thời gian chạy regex Perl chạy nhanh hơn nhiều khi làm việc với các bản cố định 'cố định' hoặc 'neo' thay vì các bản chất 'nổi'. Một chuỗi con được cố định khi bạn có thể khóa nó vào một vị trí nhất định trong chuỗi nguồn. Cả '^' và '$' đều cho phép neo đậu. Tuy nhiên, khi bạn sử dụng luân phiên '|', trình biên dịch không nhận ra các lựa chọn là cố định, vì vậy nó sử dụng ít mã được tối ưu hóa để quét toàn bộ chuỗi. Và vào cuối của quá trình, tìm kiếm các chuỗi cố định hai lần là nhiều, nhanh hơn nhiều so với tìm kiếm một chuỗi thả nổi một lần. Trên một lưu ý liên quan, đọc regcomp.c của perl sẽ làm cho bạn bị mù.
Cập nhật: Dưới đây là một số chi tiết bổ sung. Bạn có thể chạy perl với cờ '-Dr' nếu bạn đã biên dịch nó bằng hỗ trợ gỡ lỗi và nó sẽ loại bỏ dữ liệu biên dịch regex. Đây là những gì bạn nhận được:
~# debugperl -Dr -e 's/^\s+//g'
Compiling REx `^\s+'
size 4 Got 36 bytes for offset annotations.
first at 2
synthetic stclass "ANYOF[\11\12\14\15 {unicode_all}]".
1: BOL(2)
2: PLUS(4)
3: SPACE(0)
4: END(0)
stclass "ANYOF[\11\12\14\15 {unicode_all}]" anchored(BOL) minlen 1
# debugperl -Dr -e 's/^\s+|\s+$//g'
Compiling REx `^\s+|\s+$'
size 9 Got 76 bytes for offset annotations.
1: BRANCH(5)
2: BOL(3)
3: PLUS(9)
4: SPACE(0)
5: BRANCH(9)
6: PLUS(8)
7: SPACE(0)
8: EOL(9)
9: END(0)
minlen 1
Lưu ý từ 'neo' trong bãi đầu tiên.
Xem thêm http://perldoc.perl.org/perlfaq4.html#How-do-I-strip-blank-space-from-the-beginning/end-of-a-string%3f –