AL
text/x-perl
Magic Bytes
Offset: 0
65 76 61 6C 20 22 65 78 65 63 20 2F 75 73 72 2F 6C 6F 63 61 6C 2F 62 69 6E 2F 70 65 72 6C
The AL file format consists of autoloadable Perl subroutines generated by the AutoSplit utility, a component of the Perl core distribution. These files enable the Perl interpreter to load specific function definitions into memory only when required, optimizing startup performance and memory overhead for large software modules. While primarily a legacy optimization technique, these files contain plain-text executable code and should be treated with the same security precautions as standard Perl scripts.
Validation Code
How to validate .al files in Python
Python
def is_al(file_path: str) -> bool:
"""Check if file is a valid AL by magic bytes."""
signature = bytes([0x65, 0x76, 0x61, 0x6C, 0x20, 0x22, 0x65, 0x78, 0x65, 0x63, 0x20, 0x2F, 0x75, 0x73, 0x72, 0x2F, 0x6C, 0x6F, 0x63, 0x61, 0x6C, 0x2F, 0x62, 0x69, 0x6E, 0x2F, 0x70, 0x65, 0x72, 0x6C])
with open(file_path, "rb") as f:
return f.read(30) == signature
How to validate .al files in Node.js
Node.js
function isAL(buffer: Buffer): boolean {
const signature = Buffer.from([0x65, 0x76, 0x61, 0x6C, 0x20, 0x22, 0x65, 0x78, 0x65, 0x63, 0x20, 0x2F, 0x75, 0x73, 0x72, 0x2F, 0x6C, 0x6F, 0x63, 0x61, 0x6C, 0x2F, 0x62, 0x69, 0x6E, 0x2F, 0x70, 0x65, 0x72, 0x6C]);
return buffer.subarray(0, 30).equals(signature);
}
Go
func IsAL(data []byte) bool {
signature := []byte{0x65, 0x76, 0x61, 0x6C, 0x20, 0x22, 0x65, 0x78, 0x65, 0x63, 0x20, 0x2F, 0x75, 0x73, 0x72, 0x2F, 0x6C, 0x6F, 0x63, 0x61, 0x6C, 0x2F, 0x62, 0x69, 0x6E, 0x2F, 0x70, 0x65, 0x72, 0x6C}
if len(data) < 30 {
return false
}
return bytes.Equal(data[:30], signature)
}
API Endpoint
GET
/api/v1/al
curl https://filesignature.org/api/v1/al