Domain: perldoc.com
Stories and comments across the archive that link to perldoc.com.
Comments · 97
-
Some I like...Here are some links I like to keep handy -
People
Richard Stallman -
Eric S. Raymond -
Larry WallLinux Programming
Linux Programming Resources -
Kernel TrafficUnix
Unix Review -
Sys Admin -
Art of Unix ProgrammingProgramming Methodologies
Extreme ProgrammingC Programming
Programming in C -
Standard C -
C Library Reference -
GNU C LibraryC++ Programming
David Beech's Introduction to C++ -
C++ for C ProgrammersPerl Programming
Perl Doc -
Perl Monks -
Perl.com -
VMS Perl -
Use PerlNetwork Programming
Beej's Guide to Network ProgrammingOpen Source
Open Projects -
Sourceforge -
Slashcode -
The Cathedral and the Bazaar -
Re:holy shit
One of my pet peeves: it's not "PERL"; it's "Perl."
-
Re:B - The Perl Compiler
Damn it, I @#%!$& up the links! Of course it's Overrated since it's broken. Here:
- B The Perl Compiler
- B::Asmdata Autogenerated data about Perl ops, used to generate bytecode
- B::Assembler Assemble Perl bytecode
- B::Bblock Walk basic blocks
- B::Bytecode Perl compiler's bytecode backend
- B::C Perl compiler's C backend
- B::CC Perl compiler's optimized C translation backend
- B::Concise Walk Perl syntax tree, printing concise info about ops
- B::Debug Walk Perl syntax tree, printing debug info about ops
- B::Deparse Perl compiler backend to produce perl code
- B::Disassembler Disassemble Perl bytecode
- B::Lint Perl lint
- B::Showlex Show lexical variables used in functions or files
- B::Stackobj Helper module for CC backend
- B::Terse Walk Perl syntax tree, printing terse info about ops
- B::Xref Generates cross reference reports for Perl programs
See also perlcompile, perlhack, perlguts, perlxstut, perlxs, perldebtut, perldebug and perldebguts manpages.
(Note to self: Check those URLs!)
-
Re:B - The Perl Compiler
Damn it, I @#%!$& up the links! Of course it's Overrated since it's broken. Here:
- B The Perl Compiler
- B::Asmdata Autogenerated data about Perl ops, used to generate bytecode
- B::Assembler Assemble Perl bytecode
- B::Bblock Walk basic blocks
- B::Bytecode Perl compiler's bytecode backend
- B::C Perl compiler's C backend
- B::CC Perl compiler's optimized C translation backend
- B::Concise Walk Perl syntax tree, printing concise info about ops
- B::Debug Walk Perl syntax tree, printing debug info about ops
- B::Deparse Perl compiler backend to produce perl code
- B::Disassembler Disassemble Perl bytecode
- B::Lint Perl lint
- B::Showlex Show lexical variables used in functions or files
- B::Stackobj Helper module for CC backend
- B::Terse Walk Perl syntax tree, printing terse info about ops
- B::Xref Generates cross reference reports for Perl programs
See also perlcompile, perlhack, perlguts, perlxstut, perlxs, perldebtut, perldebug and perldebguts manpages.
(Note to self: Check those URLs!)
-
Re:B - The Perl Compiler
Damn it, I @#%!$& up the links! Of course it's Overrated since it's broken. Here:
- B The Perl Compiler
- B::Asmdata Autogenerated data about Perl ops, used to generate bytecode
- B::Assembler Assemble Perl bytecode
- B::Bblock Walk basic blocks
- B::Bytecode Perl compiler's bytecode backend
- B::C Perl compiler's C backend
- B::CC Perl compiler's optimized C translation backend
- B::Concise Walk Perl syntax tree, printing concise info about ops
- B::Debug Walk Perl syntax tree, printing debug info about ops
- B::Deparse Perl compiler backend to produce perl code
- B::Disassembler Disassemble Perl bytecode
- B::Lint Perl lint
- B::Showlex Show lexical variables used in functions or files
- B::Stackobj Helper module for CC backend
- B::Terse Walk Perl syntax tree, printing terse info about ops
- B::Xref Generates cross reference reports for Perl programs
See also perlcompile, perlhack, perlguts, perlxstut, perlxs, perldebtut, perldebug and perldebguts manpages.
(Note to self: Check those URLs!)
-
Re:B - The Perl Compiler
Damn it, I @#%!$& up the links! Of course it's Overrated since it's broken. Here:
- B The Perl Compiler
- B::Asmdata Autogenerated data about Perl ops, used to generate bytecode
- B::Assembler Assemble Perl bytecode
- B::Bblock Walk basic blocks
- B::Bytecode Perl compiler's bytecode backend
- B::C Perl compiler's C backend
- B::CC Perl compiler's optimized C translation backend
- B::Concise Walk Perl syntax tree, printing concise info about ops
- B::Debug Walk Perl syntax tree, printing debug info about ops
- B::Deparse Perl compiler backend to produce perl code
- B::Disassembler Disassemble Perl bytecode
- B::Lint Perl lint
- B::Showlex Show lexical variables used in functions or files
- B::Stackobj Helper module for CC backend
- B::Terse Walk Perl syntax tree, printing terse info about ops
- B::Xref Generates cross reference reports for Perl programs
See also perlcompile, perlhack, perlguts, perlxstut, perlxs, perldebtut, perldebug and perldebguts manpages.
(Note to self: Check those URLs!)
-
Re:B - The Perl Compiler
Damn it, I @#%!$& up the links! Of course it's Overrated since it's broken. Here:
- B The Perl Compiler
- B::Asmdata Autogenerated data about Perl ops, used to generate bytecode
- B::Assembler Assemble Perl bytecode
- B::Bblock Walk basic blocks
- B::Bytecode Perl compiler's bytecode backend
- B::C Perl compiler's C backend
- B::CC Perl compiler's optimized C translation backend
- B::Concise Walk Perl syntax tree, printing concise info about ops
- B::Debug Walk Perl syntax tree, printing debug info about ops
- B::Deparse Perl compiler backend to produce perl code
- B::Disassembler Disassemble Perl bytecode
- B::Lint Perl lint
- B::Showlex Show lexical variables used in functions or files
- B::Stackobj Helper module for CC backend
- B::Terse Walk Perl syntax tree, printing terse info about ops
- B::Xref Generates cross reference reports for Perl programs
See also perlcompile, perlhack, perlguts, perlxstut, perlxs, perldebtut, perldebug and perldebguts manpages.
(Note to self: Check those URLs!)
-
Re:B - The Perl Compiler
Damn it, I @#%!$& up the links! Of course it's Overrated since it's broken. Here:
- B The Perl Compiler
- B::Asmdata Autogenerated data about Perl ops, used to generate bytecode
- B::Assembler Assemble Perl bytecode
- B::Bblock Walk basic blocks
- B::Bytecode Perl compiler's bytecode backend
- B::C Perl compiler's C backend
- B::CC Perl compiler's optimized C translation backend
- B::Concise Walk Perl syntax tree, printing concise info about ops
- B::Debug Walk Perl syntax tree, printing debug info about ops
- B::Deparse Perl compiler backend to produce perl code
- B::Disassembler Disassemble Perl bytecode
- B::Lint Perl lint
- B::Showlex Show lexical variables used in functions or files
- B::Stackobj Helper module for CC backend
- B::Terse Walk Perl syntax tree, printing terse info about ops
- B::Xref Generates cross reference reports for Perl programs
See also perlcompile, perlhack, perlguts, perlxstut, perlxs, perldebtut, perldebug and perldebguts manpages.
(Note to self: Check those URLs!)
-
Re:B - The Perl Compiler
Damn it, I @#%!$& up the links! Of course it's Overrated since it's broken. Here:
- B The Perl Compiler
- B::Asmdata Autogenerated data about Perl ops, used to generate bytecode
- B::Assembler Assemble Perl bytecode
- B::Bblock Walk basic blocks
- B::Bytecode Perl compiler's bytecode backend
- B::C Perl compiler's C backend
- B::CC Perl compiler's optimized C translation backend
- B::Concise Walk Perl syntax tree, printing concise info about ops
- B::Debug Walk Perl syntax tree, printing debug info about ops
- B::Deparse Perl compiler backend to produce perl code
- B::Disassembler Disassemble Perl bytecode
- B::Lint Perl lint
- B::Showlex Show lexical variables used in functions or files
- B::Stackobj Helper module for CC backend
- B::Terse Walk Perl syntax tree, printing terse info about ops
- B::Xref Generates cross reference reports for Perl programs
See also perlcompile, perlhack, perlguts, perlxstut, perlxs, perldebtut, perldebug and perldebguts manpages.
(Note to self: Check those URLs!)
-
Re:B - The Perl Compiler
Damn it, I @#%!$& up the links! Of course it's Overrated since it's broken. Here:
- B The Perl Compiler
- B::Asmdata Autogenerated data about Perl ops, used to generate bytecode
- B::Assembler Assemble Perl bytecode
- B::Bblock Walk basic blocks
- B::Bytecode Perl compiler's bytecode backend
- B::C Perl compiler's C backend
- B::CC Perl compiler's optimized C translation backend
- B::Concise Walk Perl syntax tree, printing concise info about ops
- B::Debug Walk Perl syntax tree, printing debug info about ops
- B::Deparse Perl compiler backend to produce perl code
- B::Disassembler Disassemble Perl bytecode
- B::Lint Perl lint
- B::Showlex Show lexical variables used in functions or files
- B::Stackobj Helper module for CC backend
- B::Terse Walk Perl syntax tree, printing terse info about ops
- B::Xref Generates cross reference reports for Perl programs
See also perlcompile, perlhack, perlguts, perlxstut, perlxs, perldebtut, perldebug and perldebguts manpages.
(Note to self: Check those URLs!)
-
Re:B - The Perl Compiler
Damn it, I @#%!$& up the links! Of course it's Overrated since it's broken. Here:
- B The Perl Compiler
- B::Asmdata Autogenerated data about Perl ops, used to generate bytecode
- B::Assembler Assemble Perl bytecode
- B::Bblock Walk basic blocks
- B::Bytecode Perl compiler's bytecode backend
- B::C Perl compiler's C backend
- B::CC Perl compiler's optimized C translation backend
- B::Concise Walk Perl syntax tree, printing concise info about ops
- B::Debug Walk Perl syntax tree, printing debug info about ops
- B::Deparse Perl compiler backend to produce perl code
- B::Disassembler Disassemble Perl bytecode
- B::Lint Perl lint
- B::Showlex Show lexical variables used in functions or files
- B::Stackobj Helper module for CC backend
- B::Terse Walk Perl syntax tree, printing terse info about ops
- B::Xref Generates cross reference reports for Perl programs
See also perlcompile, perlhack, perlguts, perlxstut, perlxs, perldebtut, perldebug and perldebguts manpages.
(Note to self: Check those URLs!)
-
Re:B - The Perl Compiler
Damn it, I @#%!$& up the links! Of course it's Overrated since it's broken. Here:
- B The Perl Compiler
- B::Asmdata Autogenerated data about Perl ops, used to generate bytecode
- B::Assembler Assemble Perl bytecode
- B::Bblock Walk basic blocks
- B::Bytecode Perl compiler's bytecode backend
- B::C Perl compiler's C backend
- B::CC Perl compiler's optimized C translation backend
- B::Concise Walk Perl syntax tree, printing concise info about ops
- B::Debug Walk Perl syntax tree, printing debug info about ops
- B::Deparse Perl compiler backend to produce perl code
- B::Disassembler Disassemble Perl bytecode
- B::Lint Perl lint
- B::Showlex Show lexical variables used in functions or files
- B::Stackobj Helper module for CC backend
- B::Terse Walk Perl syntax tree, printing terse info about ops
- B::Xref Generates cross reference reports for Perl programs
See also perlcompile, perlhack, perlguts, perlxstut, perlxs, perldebtut, perldebug and perldebguts manpages.
(Note to self: Check those URLs!)
-
Re:B - The Perl Compiler
Damn it, I @#%!$& up the links! Of course it's Overrated since it's broken. Here:
- B The Perl Compiler
- B::Asmdata Autogenerated data about Perl ops, used to generate bytecode
- B::Assembler Assemble Perl bytecode
- B::Bblock Walk basic blocks
- B::Bytecode Perl compiler's bytecode backend
- B::C Perl compiler's C backend
- B::CC Perl compiler's optimized C translation backend
- B::Concise Walk Perl syntax tree, printing concise info about ops
- B::Debug Walk Perl syntax tree, printing debug info about ops
- B::Deparse Perl compiler backend to produce perl code
- B::Disassembler Disassemble Perl bytecode
- B::Lint Perl lint
- B::Showlex Show lexical variables used in functions or files
- B::Stackobj Helper module for CC backend
- B::Terse Walk Perl syntax tree, printing terse info about ops
- B::Xref Generates cross reference reports for Perl programs
See also perlcompile, perlhack, perlguts, perlxstut, perlxs, perldebtut, perldebug and perldebguts manpages.
(Note to self: Check those URLs!)
-
Re:B - The Perl Compiler
Damn it, I @#%!$& up the links! Of course it's Overrated since it's broken. Here:
- B The Perl Compiler
- B::Asmdata Autogenerated data about Perl ops, used to generate bytecode
- B::Assembler Assemble Perl bytecode
- B::Bblock Walk basic blocks
- B::Bytecode Perl compiler's bytecode backend
- B::C Perl compiler's C backend
- B::CC Perl compiler's optimized C translation backend
- B::Concise Walk Perl syntax tree, printing concise info about ops
- B::Debug Walk Perl syntax tree, printing debug info about ops
- B::Deparse Perl compiler backend to produce perl code
- B::Disassembler Disassemble Perl bytecode
- B::Lint Perl lint
- B::Showlex Show lexical variables used in functions or files
- B::Stackobj Helper module for CC backend
- B::Terse Walk Perl syntax tree, printing terse info about ops
- B::Xref Generates cross reference reports for Perl programs
See also perlcompile, perlhack, perlguts, perlxstut, perlxs, perldebtut, perldebug and perldebguts manpages.
(Note to self: Check those URLs!)
-
Re:B - The Perl Compiler
Damn it, I @#%!$& up the links! Of course it's Overrated since it's broken. Here:
- B The Perl Compiler
- B::Asmdata Autogenerated data about Perl ops, used to generate bytecode
- B::Assembler Assemble Perl bytecode
- B::Bblock Walk basic blocks
- B::Bytecode Perl compiler's bytecode backend
- B::C Perl compiler's C backend
- B::CC Perl compiler's optimized C translation backend
- B::Concise Walk Perl syntax tree, printing concise info about ops
- B::Debug Walk Perl syntax tree, printing debug info about ops
- B::Deparse Perl compiler backend to produce perl code
- B::Disassembler Disassemble Perl bytecode
- B::Lint Perl lint
- B::Showlex Show lexical variables used in functions or files
- B::Stackobj Helper module for CC backend
- B::Terse Walk Perl syntax tree, printing terse info about ops
- B::Xref Generates cross reference reports for Perl programs
See also perlcompile, perlhack, perlguts, perlxstut, perlxs, perldebtut, perldebug and perldebguts manpages.
(Note to self: Check those URLs!)
-
Re:B - The Perl Compiler
Damn it, I @#%!$& up the links! Of course it's Overrated since it's broken. Here:
- B The Perl Compiler
- B::Asmdata Autogenerated data about Perl ops, used to generate bytecode
- B::Assembler Assemble Perl bytecode
- B::Bblock Walk basic blocks
- B::Bytecode Perl compiler's bytecode backend
- B::C Perl compiler's C backend
- B::CC Perl compiler's optimized C translation backend
- B::Concise Walk Perl syntax tree, printing concise info about ops
- B::Debug Walk Perl syntax tree, printing debug info about ops
- B::Deparse Perl compiler backend to produce perl code
- B::Disassembler Disassemble Perl bytecode
- B::Lint Perl lint
- B::Showlex Show lexical variables used in functions or files
- B::Stackobj Helper module for CC backend
- B::Terse Walk Perl syntax tree, printing terse info about ops
- B::Xref Generates cross reference reports for Perl programs
See also perlcompile, perlhack, perlguts, perlxstut, perlxs, perldebtut, perldebug and perldebguts manpages.
(Note to self: Check those URLs!)
-
Re:B - The Perl Compiler
Damn it, I @#%!$& up the links! Of course it's Overrated since it's broken. Here:
- B The Perl Compiler
- B::Asmdata Autogenerated data about Perl ops, used to generate bytecode
- B::Assembler Assemble Perl bytecode
- B::Bblock Walk basic blocks
- B::Bytecode Perl compiler's bytecode backend
- B::C Perl compiler's C backend
- B::CC Perl compiler's optimized C translation backend
- B::Concise Walk Perl syntax tree, printing concise info about ops
- B::Debug Walk Perl syntax tree, printing debug info about ops
- B::Deparse Perl compiler backend to produce perl code
- B::Disassembler Disassemble Perl bytecode
- B::Lint Perl lint
- B::Showlex Show lexical variables used in functions or files
- B::Stackobj Helper module for CC backend
- B::Terse Walk Perl syntax tree, printing terse info about ops
- B::Xref Generates cross reference reports for Perl programs
See also perlcompile, perlhack, perlguts, perlxstut, perlxs, perldebtut, perldebug and perldebguts manpages.
(Note to self: Check those URLs!)
-
Re:B - The Perl Compiler
Damn it, I @#%!$& up the links! Of course it's Overrated since it's broken. Here:
- B The Perl Compiler
- B::Asmdata Autogenerated data about Perl ops, used to generate bytecode
- B::Assembler Assemble Perl bytecode
- B::Bblock Walk basic blocks
- B::Bytecode Perl compiler's bytecode backend
- B::C Perl compiler's C backend
- B::CC Perl compiler's optimized C translation backend
- B::Concise Walk Perl syntax tree, printing concise info about ops
- B::Debug Walk Perl syntax tree, printing debug info about ops
- B::Deparse Perl compiler backend to produce perl code
- B::Disassembler Disassemble Perl bytecode
- B::Lint Perl lint
- B::Showlex Show lexical variables used in functions or files
- B::Stackobj Helper module for CC backend
- B::Terse Walk Perl syntax tree, printing terse info about ops
- B::Xref Generates cross reference reports for Perl programs
See also perlcompile, perlhack, perlguts, perlxstut, perlxs, perldebtut, perldebug and perldebguts manpages.
(Note to self: Check those URLs!)
-
Re:B - The Perl Compiler
Damn it, I @#%!$& up the links! Of course it's Overrated since it's broken. Here:
- B The Perl Compiler
- B::Asmdata Autogenerated data about Perl ops, used to generate bytecode
- B::Assembler Assemble Perl bytecode
- B::Bblock Walk basic blocks
- B::Bytecode Perl compiler's bytecode backend
- B::C Perl compiler's C backend
- B::CC Perl compiler's optimized C translation backend
- B::Concise Walk Perl syntax tree, printing concise info about ops
- B::Debug Walk Perl syntax tree, printing debug info about ops
- B::Deparse Perl compiler backend to produce perl code
- B::Disassembler Disassemble Perl bytecode
- B::Lint Perl lint
- B::Showlex Show lexical variables used in functions or files
- B::Stackobj Helper module for CC backend
- B::Terse Walk Perl syntax tree, printing terse info about ops
- B::Xref Generates cross reference reports for Perl programs
See also perlcompile, perlhack, perlguts, perlxstut, perlxs, perldebtut, perldebug and perldebguts manpages.
(Note to self: Check those URLs!)
-
Re:B - The Perl Compiler
Damn it, I @#%!$& up the links! Of course it's Overrated since it's broken. Here:
- B The Perl Compiler
- B::Asmdata Autogenerated data about Perl ops, used to generate bytecode
- B::Assembler Assemble Perl bytecode
- B::Bblock Walk basic blocks
- B::Bytecode Perl compiler's bytecode backend
- B::C Perl compiler's C backend
- B::CC Perl compiler's optimized C translation backend
- B::Concise Walk Perl syntax tree, printing concise info about ops
- B::Debug Walk Perl syntax tree, printing debug info about ops
- B::Deparse Perl compiler backend to produce perl code
- B::Disassembler Disassemble Perl bytecode
- B::Lint Perl lint
- B::Showlex Show lexical variables used in functions or files
- B::Stackobj Helper module for CC backend
- B::Terse Walk Perl syntax tree, printing terse info about ops
- B::Xref Generates cross reference reports for Perl programs
See also perlcompile, perlhack, perlguts, perlxstut, perlxs, perldebtut, perldebug and perldebguts manpages.
(Note to self: Check those URLs!)
-
Re:B - The Perl Compiler
Damn it, I @#%!$& up the links! Of course it's Overrated since it's broken. Here:
- B The Perl Compiler
- B::Asmdata Autogenerated data about Perl ops, used to generate bytecode
- B::Assembler Assemble Perl bytecode
- B::Bblock Walk basic blocks
- B::Bytecode Perl compiler's bytecode backend
- B::C Perl compiler's C backend
- B::CC Perl compiler's optimized C translation backend
- B::Concise Walk Perl syntax tree, printing concise info about ops
- B::Debug Walk Perl syntax tree, printing debug info about ops
- B::Deparse Perl compiler backend to produce perl code
- B::Disassembler Disassemble Perl bytecode
- B::Lint Perl lint
- B::Showlex Show lexical variables used in functions or files
- B::Stackobj Helper module for CC backend
- B::Terse Walk Perl syntax tree, printing terse info about ops
- B::Xref Generates cross reference reports for Perl programs
See also perlcompile, perlhack, perlguts, perlxstut, perlxs, perldebtut, perldebug and perldebguts manpages.
(Note to self: Check those URLs!)
-
Re:B - The Perl Compiler
Damn it, I @#%!$& up the links! Of course it's Overrated since it's broken. Here:
- B The Perl Compiler
- B::Asmdata Autogenerated data about Perl ops, used to generate bytecode
- B::Assembler Assemble Perl bytecode
- B::Bblock Walk basic blocks
- B::Bytecode Perl compiler's bytecode backend
- B::C Perl compiler's C backend
- B::CC Perl compiler's optimized C translation backend
- B::Concise Walk Perl syntax tree, printing concise info about ops
- B::Debug Walk Perl syntax tree, printing debug info about ops
- B::Deparse Perl compiler backend to produce perl code
- B::Disassembler Disassemble Perl bytecode
- B::Lint Perl lint
- B::Showlex Show lexical variables used in functions or files
- B::Stackobj Helper module for CC backend
- B::Terse Walk Perl syntax tree, printing terse info about ops
- B::Xref Generates cross reference reports for Perl programs
See also perlcompile, perlhack, perlguts, perlxstut, perlxs, perldebtut, perldebug and perldebguts manpages.
(Note to self: Check those URLs!)
-
Re:B - The Perl Compiler
Damn it, I @#%!$& up the links! Of course it's Overrated since it's broken. Here:
- B The Perl Compiler
- B::Asmdata Autogenerated data about Perl ops, used to generate bytecode
- B::Assembler Assemble Perl bytecode
- B::Bblock Walk basic blocks
- B::Bytecode Perl compiler's bytecode backend
- B::C Perl compiler's C backend
- B::CC Perl compiler's optimized C translation backend
- B::Concise Walk Perl syntax tree, printing concise info about ops
- B::Debug Walk Perl syntax tree, printing debug info about ops
- B::Deparse Perl compiler backend to produce perl code
- B::Disassembler Disassemble Perl bytecode
- B::Lint Perl lint
- B::Showlex Show lexical variables used in functions or files
- B::Stackobj Helper module for CC backend
- B::Terse Walk Perl syntax tree, printing terse info about ops
- B::Xref Generates cross reference reports for Perl programs
See also perlcompile, perlhack, perlguts, perlxstut, perlxs, perldebtut, perldebug and perldebguts manpages.
(Note to self: Check those URLs!)
-
Re:B - The Perl Compiler
Damn it, I @#%!$& up the links! Of course it's Overrated since it's broken. Here:
- B The Perl Compiler
- B::Asmdata Autogenerated data about Perl ops, used to generate bytecode
- B::Assembler Assemble Perl bytecode
- B::Bblock Walk basic blocks
- B::Bytecode Perl compiler's bytecode backend
- B::C Perl compiler's C backend
- B::CC Perl compiler's optimized C translation backend
- B::Concise Walk Perl syntax tree, printing concise info about ops
- B::Debug Walk Perl syntax tree, printing debug info about ops
- B::Deparse Perl compiler backend to produce perl code
- B::Disassembler Disassemble Perl bytecode
- B::Lint Perl lint
- B::Showlex Show lexical variables used in functions or files
- B::Stackobj Helper module for CC backend
- B::Terse Walk Perl syntax tree, printing terse info about ops
- B::Xref Generates cross reference reports for Perl programs
See also perlcompile, perlhack, perlguts, perlxstut, perlxs, perldebtut, perldebug and perldebguts manpages.
(Note to self: Check those URLs!)
-
Re:B - The Perl Compiler
Damn it, I @#%!$& up the links! Of course it's Overrated since it's broken. Here:
- B The Perl Compiler
- B::Asmdata Autogenerated data about Perl ops, used to generate bytecode
- B::Assembler Assemble Perl bytecode
- B::Bblock Walk basic blocks
- B::Bytecode Perl compiler's bytecode backend
- B::C Perl compiler's C backend
- B::CC Perl compiler's optimized C translation backend
- B::Concise Walk Perl syntax tree, printing concise info about ops
- B::Debug Walk Perl syntax tree, printing debug info about ops
- B::Deparse Perl compiler backend to produce perl code
- B::Disassembler Disassemble Perl bytecode
- B::Lint Perl lint
- B::Showlex Show lexical variables used in functions or files
- B::Stackobj Helper module for CC backend
- B::Terse Walk Perl syntax tree, printing terse info about ops
- B::Xref Generates cross reference reports for Perl programs
See also perlcompile, perlhack, perlguts, perlxstut, perlxs, perldebtut, perldebug and perldebguts manpages.
(Note to self: Check those URLs!)
-
Re:B - The Perl Compiler
Damn it, I @#%!$& up the links! Of course it's Overrated since it's broken. Here:
- B The Perl Compiler
- B::Asmdata Autogenerated data about Perl ops, used to generate bytecode
- B::Assembler Assemble Perl bytecode
- B::Bblock Walk basic blocks
- B::Bytecode Perl compiler's bytecode backend
- B::C Perl compiler's C backend
- B::CC Perl compiler's optimized C translation backend
- B::Concise Walk Perl syntax tree, printing concise info about ops
- B::Debug Walk Perl syntax tree, printing debug info about ops
- B::Deparse Perl compiler backend to produce perl code
- B::Disassembler Disassemble Perl bytecode
- B::Lint Perl lint
- B::Showlex Show lexical variables used in functions or files
- B::Stackobj Helper module for CC backend
- B::Terse Walk Perl syntax tree, printing terse info about ops
- B::Xref Generates cross reference reports for Perl programs
See also perlcompile, perlhack, perlguts, perlxstut, perlxs, perldebtut, perldebug and perldebguts manpages.
(Note to self: Check those URLs!)
-
Re:perl is teh sux0rz
Hasn't anyone had the perl style guide dropped on their desk the first day they started doing perl for a company? That and a few commandments from my old boss worked wonders:
Thou shalt use strict
Thou shalt use -w
Thy subs shall fit in one page.
Thy programs shall produce output from pod2txt
Subs used in more than one program shalt be included in a module.
That and when i was writing most of my code I was also teaching one of the Jr. Admins Perl so my code was commented ad naseum (I really think that my scripts were 50% or more of just comments.)
It made me feel all warm and fuzzy when my acolyte e-mailed me a year after I'd left and told me that the Sr. SA had taken one of my scripts and converted it to a module in 1/2 a day to extend one of their applications. -
Perl has it, too
Perl has POD, which can be embedded in your source in a manner similar to javadoc. You can then use standard Perl tools to turn the source into html, LaTeX, man pages or whatever.
-
Perl has it, too
Perl has POD, which can be embedded in your source in a manner similar to javadoc. You can then use standard Perl tools to turn the source into html, LaTeX, man pages or whatever.
-
Re:My perl is not as grand as it once was...
My post was actually a joke (I'm surprised that someone has moderated it as Troll! If that moderator thought I don't like Perl, he/she obviously hasn't read my code...) and this was a parody for Java's "write once, run everywhere". ...but I do not think that perl is the "Write Once, Read Nowhere" langue you make it out to be ^_^Just for a little fun, I thought I'd try out my rusting perl tricks and unroll your silly script.
You're a first person I know about, who was ever interested in understanding this code. This is my original, clean version:$c = 'plfeY04jaJnYI';
I'm amazed, that your code is almost identical, congratulations! I like this program, because looking at it (the clean version) it's impossible to know how long it would take to get the result. For example your domain voila.fr would be written if $c was frmHZ0u6Ne2HQ but it takes about an hour to crack on my machine, while my domain in plfeY04jaJnYI is cracked in only 4 seconds. It would take over 2 years and 7 months to crack this xxFHuIaD7CdpI, which is the worst case, zzzzzzzz, the last key guessed by my program. So, the average time for guessing random keys (containing 1 to 8 lowercase letters) is over one year!
$s = substr $c, 0, 2;
for $l (1..8) {
for ('a' x $l .. 'z' x $l){
if($c eq crypt($_, $s)) {
print "$_.$s\n";
exit;
}
}
}If you want to see a really good password cracking program, check out Alec Muffett's great and famous Crack. It's really great, especially when you have good dictionaries. If you want to check if your password is easily cracked by Crack, you can use Alec Muffett's CrackLib. Check out my online Password-Guessability-O-Meter, I wrote it some time ago to demonstrate to one of my clients how does the CrackLib work. You just enter your desired password, and it tells you if (and why) it is easy to guess, using English, Polish, Czech, French and Latin dictionaries.
I use CrackLib for online registrations CGI scripts etc. so users can't have silly and easy to guess passwords. It can also be used with passwd program. Great library, and easy to use (there's Crypt::Cracklib Perl interface), but may be quite difficult to set up for the first time.
Not very difficile, Mister shiny@rfl.pl, but I shall compliment you for at least trying to obfuscate with the silly "q//" perl operateur ^_^
Thanks. :) I like it too. That's the most recent obfuscation, if I remember correctly. When I started to experiment with q// using q,x, and q.x. and q;x; etc. I was even trying to use something like this:$q=q,p,.q,l,.q,f,.q,e,.q,Y,.q,0,.q,4,.q,j,.q,a,.q
(in one line and with no spaces) but it looks terrible, as you can see., J,.q,n,.q,Y,.q,I,;The "if" statement is another ruse; suffixed "if" is in fact called before the condition of the "if" statement, and he uses this to initialise $q apparently after it's been first used. The above code is in fact equal to this:
Yes, this is exactly the original code, and this is exactly the way I was thinking. You're very good.$q = 'plfeY04jaJnYI';
$x = substr $q, 0, 2; :)And it makes itself apparent that $q is the crypt hash (henceforth called $crypt) and $x is the salt ($salt).
The original variables were $c and $s, I changed them to $q and $x for easy mistakes with q// quoting and x repetition operator.for (++$_..$_<<3){...}
Now you are just being silly
:-) $_ is not used yet and thus is 0, and ++0 is of course 1. 1<<3 is 8. :) 1..8 looked just to clear and simple... And that way I have 3 independent values of $_ variable (i.e. the original global $::_ is two times localized) in 3 nested scopes (main program, outer loop and inner loop), which makes it more interesting.for($i = 1; $i <= 8; ++$i) {...}
Actually in newer versions of Perl, the foreach loop is faster than the C-style for loop. See perlop manpage: Range Operators and perlsyn manpage: Foreach Loops.Which not only looks simpler, but runs faster too ^_^
I just run this benchmark:
#!/usr/bin/perl -w
and with Perl 5.6.1 I got this results:
use Benchmark;
sub s1{ for ($i = 1; $i <= 1_000_000; ++$i) { } }
sub s2{ for (1 .. 1_000_000) { } }
$t1 = timestr timeit 100, \
$t2 = timestr timeit 100, \
print "1. $t1\n2. $t2\n";1. 103 wallclock secs (87.77 usr + 0.15 sys = 87.92 CPU) @ 1.14/s (n=100)
2. 60 wallclock secs (51.93 usr + 0.04 sys = 51.97 CPU) @ 1.92/s (n=100)But in my code this loop has only eight iterations, where the 8th one takes two years, so the loop control overhead itself doesn't really matter here. The inner loop is more important but crack() function takes most of the time, anyway.
Older versions of Perl (I don't know which exactly) created a temporary array for the range operator in foreach loop, so the code like:
for (1
could easily take all of the memory, but now it's fixed. Fortunately, it doesn't create a temporary array any more, and it's highly optimized, so it's safe to use it now for large ranges. .. 1_000_000_000) { ... }The "and die" bit just is taking advantage of the short-circuit boolean operateur système. The "die" only is executing when $crypt (the origin hash) and the encrypted form of the current guess are equal, in which case the key has been found and we quit ^_^ I changed it to a nicer looking "print" statement for further clairitie.
Yes, there were print and exit in the original version. You have exactly reconstructed my way of thinking. Well done. :)I think you're very good, really. Most of people have no idea how to analyze such obfuscated code. Actually I'm quite disappointed that decrypting my code was so easy for you...
:)I'll tell you why and how I wrote this program. I was inspired by this code:
#!/usr/bin/perl
and few JAPH signatures. I wanted to write a small program, that it would be impossible to tell what it writes, until you run it. Most of such programs are very obfuscated but after enough work you can usually find the printed message, without running them. So I thought that the message could be ciphered using some one-way alghoritm, like crypt(3) or MD5, and the code would just brute-force crack it. That way it's really impossible to tell what the message is, until you run the code. The code itself only cracks, but doesn't know what is being cracked and when it finishes. Using crypt(3) had this advantage, that it has 2-character salt, which can act as country code in domain name.
@a=(Lbzjoftt,Inqbujfodf,
Hvcsjt); $b="Lbssz Wbmm" ;$b =~ y/b-z/a-z/ ; $c =
" Tif ". @a ." hsfbu wj" ."suvft pg b qsphsbnnfs"
. ":\n";$c =~y/b-y/a-z/;
print"\n\n$c ";for($i=0;
$i<@a; $i++) { $a[$i] =~
y/b-y/a-z/;if($a[$i]eq$a
[-1]){print"and $a[$i]." ;}else{ print"$a[$i], ";
}}print"\n\t\t--$b\n\n";So I wrote the first working version and started to make it as small as possible. Originally it didn't have to be obfuscated, just small. This is the smallest version I've written so far:
$c='plfeY04jaJnYI';$s=substr$c,0,
with 98 characters. But today I shrinked it some more, to 93 characters:
2;for(1..8){for('a'x$_..'z'x$_){
die"$_.$s\n"if crypt($_,$s)eq$c}}$c='plfeY04jaJnYI';$s=substr$c,
and few minutes ago (while I write this comment!) I found a better idea and wrote this:
0,2;for(1..8){$c eq crypt$_,$s
and die"$_.$s"for'a'x$_..'z'x$_}$c='plfeY04jaJnYI';$s=substr$c,0,2;$k=
which having only 79 characters is my record so far (thanks to Perl's magical auto-increment operator) and finally fits in one line!
'a';$k++while$c ne crypt$k,$s;die"$k.$s";Hopefully that wasn't too difficile to follow, my english is not perfect.
Your english is OK, don't worry. Actually, I like the way you use French spelling for some words, like difficile. It's like a French accent in written text, very nice in my opinion.Just remember, Mr. shiny@rfl.pl, no langue is completely impenetrable (except perhaps Intercal, but that's a small bit pathological
Good point. :-) :) I wonder if these guys tried Intercal when proving the impossibility of obfuscating programs... I personally like Unlambda and Brainf***.This Unlambda program "calculates and prints the Fibonacci numbers (as lines of asterisks)":
```s``s``sii`ki
`k.*``s``s`ks
``s`k`s`ks``s``s`ks``s`k`s`kr``s`k`sikk
`k``s`kskI wanted to show a Hello world example of Brainf***, but I got this error:
Lameness filter encountered. Post aborted!
Visit Esoteric Topics in Computer Programming, great stuff if you want to go mad.
Reason: Please use fewer 'junk' characters.You like Perl, so if you know Inline::C and Inline::CPR (if you don't, read Pathologically Polluting Perl by Brian Ingerson) you may enjoy understanding this code:
#!/usr/bin/cpr
It's great, once you really understand it.
int main(void) {
CPR_eval("use Inline (C => q{
char* greet() {
return \"Hello world\";
}
})");
printf("%s, I'm running under Perl version %s\n",
CPR_eval("&greet"),
CPR_eval("use Config; $Config{version}"));
return 0;
}Are you up to date with Perl 6 development? It's going to be great and extremely powerful language. Read Larry Wall's Apocalypses and Damian Conway's Exegeses if you're interested:
- Apocalypse 1: The Ugly, the Bad, and the Good (April 2, 2001)
- Apocalypse 2: Fundamental data types, variables and the context and scoping of the language (May 3, 2001)
- Exegesis 2 (May 15, 2001)
- Apocalypse 3: Operators (October 2, 2001)
- Exegesis 3 (October 3, 2001)
- Apocalypse 4: Syntax (January 18, 2002)
-
Re:My perl is not as grand as it once was...
My post was actually a joke (I'm surprised that someone has moderated it as Troll! If that moderator thought I don't like Perl, he/she obviously hasn't read my code...) and this was a parody for Java's "write once, run everywhere". ...but I do not think that perl is the "Write Once, Read Nowhere" langue you make it out to be ^_^Just for a little fun, I thought I'd try out my rusting perl tricks and unroll your silly script.
You're a first person I know about, who was ever interested in understanding this code. This is my original, clean version:$c = 'plfeY04jaJnYI';
I'm amazed, that your code is almost identical, congratulations! I like this program, because looking at it (the clean version) it's impossible to know how long it would take to get the result. For example your domain voila.fr would be written if $c was frmHZ0u6Ne2HQ but it takes about an hour to crack on my machine, while my domain in plfeY04jaJnYI is cracked in only 4 seconds. It would take over 2 years and 7 months to crack this xxFHuIaD7CdpI, which is the worst case, zzzzzzzz, the last key guessed by my program. So, the average time for guessing random keys (containing 1 to 8 lowercase letters) is over one year!
$s = substr $c, 0, 2;
for $l (1..8) {
for ('a' x $l .. 'z' x $l){
if($c eq crypt($_, $s)) {
print "$_.$s\n";
exit;
}
}
}If you want to see a really good password cracking program, check out Alec Muffett's great and famous Crack. It's really great, especially when you have good dictionaries. If you want to check if your password is easily cracked by Crack, you can use Alec Muffett's CrackLib. Check out my online Password-Guessability-O-Meter, I wrote it some time ago to demonstrate to one of my clients how does the CrackLib work. You just enter your desired password, and it tells you if (and why) it is easy to guess, using English, Polish, Czech, French and Latin dictionaries.
I use CrackLib for online registrations CGI scripts etc. so users can't have silly and easy to guess passwords. It can also be used with passwd program. Great library, and easy to use (there's Crypt::Cracklib Perl interface), but may be quite difficult to set up for the first time.
Not very difficile, Mister shiny@rfl.pl, but I shall compliment you for at least trying to obfuscate with the silly "q//" perl operateur ^_^
Thanks. :) I like it too. That's the most recent obfuscation, if I remember correctly. When I started to experiment with q// using q,x, and q.x. and q;x; etc. I was even trying to use something like this:$q=q,p,.q,l,.q,f,.q,e,.q,Y,.q,0,.q,4,.q,j,.q,a,.q
(in one line and with no spaces) but it looks terrible, as you can see., J,.q,n,.q,Y,.q,I,;The "if" statement is another ruse; suffixed "if" is in fact called before the condition of the "if" statement, and he uses this to initialise $q apparently after it's been first used. The above code is in fact equal to this:
Yes, this is exactly the original code, and this is exactly the way I was thinking. You're very good.$q = 'plfeY04jaJnYI';
$x = substr $q, 0, 2; :)And it makes itself apparent that $q is the crypt hash (henceforth called $crypt) and $x is the salt ($salt).
The original variables were $c and $s, I changed them to $q and $x for easy mistakes with q// quoting and x repetition operator.for (++$_..$_<<3){...}
Now you are just being silly
:-) $_ is not used yet and thus is 0, and ++0 is of course 1. 1<<3 is 8. :) 1..8 looked just to clear and simple... And that way I have 3 independent values of $_ variable (i.e. the original global $::_ is two times localized) in 3 nested scopes (main program, outer loop and inner loop), which makes it more interesting.for($i = 1; $i <= 8; ++$i) {...}
Actually in newer versions of Perl, the foreach loop is faster than the C-style for loop. See perlop manpage: Range Operators and perlsyn manpage: Foreach Loops.Which not only looks simpler, but runs faster too ^_^
I just run this benchmark:
#!/usr/bin/perl -w
and with Perl 5.6.1 I got this results:
use Benchmark;
sub s1{ for ($i = 1; $i <= 1_000_000; ++$i) { } }
sub s2{ for (1 .. 1_000_000) { } }
$t1 = timestr timeit 100, \
$t2 = timestr timeit 100, \
print "1. $t1\n2. $t2\n";1. 103 wallclock secs (87.77 usr + 0.15 sys = 87.92 CPU) @ 1.14/s (n=100)
2. 60 wallclock secs (51.93 usr + 0.04 sys = 51.97 CPU) @ 1.92/s (n=100)But in my code this loop has only eight iterations, where the 8th one takes two years, so the loop control overhead itself doesn't really matter here. The inner loop is more important but crack() function takes most of the time, anyway.
Older versions of Perl (I don't know which exactly) created a temporary array for the range operator in foreach loop, so the code like:
for (1
could easily take all of the memory, but now it's fixed. Fortunately, it doesn't create a temporary array any more, and it's highly optimized, so it's safe to use it now for large ranges. .. 1_000_000_000) { ... }The "and die" bit just is taking advantage of the short-circuit boolean operateur système. The "die" only is executing when $crypt (the origin hash) and the encrypted form of the current guess are equal, in which case the key has been found and we quit ^_^ I changed it to a nicer looking "print" statement for further clairitie.
Yes, there were print and exit in the original version. You have exactly reconstructed my way of thinking. Well done. :)I think you're very good, really. Most of people have no idea how to analyze such obfuscated code. Actually I'm quite disappointed that decrypting my code was so easy for you...
:)I'll tell you why and how I wrote this program. I was inspired by this code:
#!/usr/bin/perl
and few JAPH signatures. I wanted to write a small program, that it would be impossible to tell what it writes, until you run it. Most of such programs are very obfuscated but after enough work you can usually find the printed message, without running them. So I thought that the message could be ciphered using some one-way alghoritm, like crypt(3) or MD5, and the code would just brute-force crack it. That way it's really impossible to tell what the message is, until you run the code. The code itself only cracks, but doesn't know what is being cracked and when it finishes. Using crypt(3) had this advantage, that it has 2-character salt, which can act as country code in domain name.
@a=(Lbzjoftt,Inqbujfodf,
Hvcsjt); $b="Lbssz Wbmm" ;$b =~ y/b-z/a-z/ ; $c =
" Tif ". @a ." hsfbu wj" ."suvft pg b qsphsbnnfs"
. ":\n";$c =~y/b-y/a-z/;
print"\n\n$c ";for($i=0;
$i<@a; $i++) { $a[$i] =~
y/b-y/a-z/;if($a[$i]eq$a
[-1]){print"and $a[$i]." ;}else{ print"$a[$i], ";
}}print"\n\t\t--$b\n\n";So I wrote the first working version and started to make it as small as possible. Originally it didn't have to be obfuscated, just small. This is the smallest version I've written so far:
$c='plfeY04jaJnYI';$s=substr$c,0,
with 98 characters. But today I shrinked it some more, to 93 characters:
2;for(1..8){for('a'x$_..'z'x$_){
die"$_.$s\n"if crypt($_,$s)eq$c}}$c='plfeY04jaJnYI';$s=substr$c,
and few minutes ago (while I write this comment!) I found a better idea and wrote this:
0,2;for(1..8){$c eq crypt$_,$s
and die"$_.$s"for'a'x$_..'z'x$_}$c='plfeY04jaJnYI';$s=substr$c,0,2;$k=
which having only 79 characters is my record so far (thanks to Perl's magical auto-increment operator) and finally fits in one line!
'a';$k++while$c ne crypt$k,$s;die"$k.$s";Hopefully that wasn't too difficile to follow, my english is not perfect.
Your english is OK, don't worry. Actually, I like the way you use French spelling for some words, like difficile. It's like a French accent in written text, very nice in my opinion.Just remember, Mr. shiny@rfl.pl, no langue is completely impenetrable (except perhaps Intercal, but that's a small bit pathological
Good point. :-) :) I wonder if these guys tried Intercal when proving the impossibility of obfuscating programs... I personally like Unlambda and Brainf***.This Unlambda program "calculates and prints the Fibonacci numbers (as lines of asterisks)":
```s``s``sii`ki
`k.*``s``s`ks
``s`k`s`ks``s``s`ks``s`k`s`kr``s`k`sikk
`k``s`kskI wanted to show a Hello world example of Brainf***, but I got this error:
Lameness filter encountered. Post aborted!
Visit Esoteric Topics in Computer Programming, great stuff if you want to go mad.
Reason: Please use fewer 'junk' characters.You like Perl, so if you know Inline::C and Inline::CPR (if you don't, read Pathologically Polluting Perl by Brian Ingerson) you may enjoy understanding this code:
#!/usr/bin/cpr
It's great, once you really understand it.
int main(void) {
CPR_eval("use Inline (C => q{
char* greet() {
return \"Hello world\";
}
})");
printf("%s, I'm running under Perl version %s\n",
CPR_eval("&greet"),
CPR_eval("use Config; $Config{version}"));
return 0;
}Are you up to date with Perl 6 development? It's going to be great and extremely powerful language. Read Larry Wall's Apocalypses and Damian Conway's Exegeses if you're interested:
- Apocalypse 1: The Ugly, the Bad, and the Good (April 2, 2001)
- Apocalypse 2: Fundamental data types, variables and the context and scoping of the language (May 3, 2001)
- Exegesis 2 (May 15, 2001)
- Apocalypse 3: Operators (October 2, 2001)
- Exegesis 3 (October 3, 2001)
- Apocalypse 4: Syntax (January 18, 2002)
-
Re:I totally agree...
What I've never understood about Microsoft is why they don't have licenses that give people the opportunity to learn their product. In doing this they are shutting out a huge number of developers (not just students).
I used to study on the largest technological university in the Central Europe.Most of the software we learned about was written by Microsoft (Windows 95/NT, Visual C++, Visual Basic, MS SQL Server, IIS, ASP, Word, Excel, Front Page, etc.) and our professors always told us to get this software from somewhere and install it for educational purposes (the pirated versions of course). Some of them were even offering us their own CDs which we could borrow and install.
They used to say "it's for educational purposes, it's not a piracy, it's not unfair to Microsoft" and guess what? They were right. Microsoft should pay them for that!
Why? Because they were teaching thousands of future IT experts, which were totally unable to use free software. Will their future employers buy Windows for servers? Sure they will, because their "sysadmins" will be too dumb to run Debian or OpenBSD. Will they buy IIS? Of course, because their "webmasters" will have no idea how to run Apache. Will they buy MS SQL Server? They will have to, because their "database experts" won't be able to use MySQL. Will they use ASP for server-side scripting? What else could they do having PHP/Perl/Python-ignorant "web developers". Will they buy MCVC++? They won't have much choice as VI/Emacs+GCC will be a black magic for their "C++ programmers".
What else can I say? "Pirating software is like stealing crack from a drug dealer and pretending that it makes you free from addiction." This is especially true on the university.
I'm sure that every time Bill Gates gets the information that students on such a university are pirating thousands of copies of Microsoft software, he laughs like an evil genius - and he's right. People don't use IIS because it's better, faster, more secure, stable or cost effective than Apache. They use it, because that is everything they know.
And what would most of employers do when their crew knows only IIS and ASP? Would they ask them to read many different books and lots of online documentation and start the project next year? No, it'd be cheaper and faster to just give up, buy Microsoft licenses and start the project today.
But maybe I shouldn't be angry, after all I have a rare knowledge how to save hundreds thousands of dollars in just a small-sized server farm so I have quite a nice money thanks to other people's stupidity. Actually, I should (together with Bill Gates) pay those ignorant professors, or at least send them flowers!
-
Re:Broken?
the script does nothing.
It's a filter."This is the Unix philosophy. Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface." - Doug MacIlroy, the inventor of pipes.
You have to pipe your Base64 data through it (or similar one) like this:
$ echo Qml0ZSBteSBzaGlueSBtZXRhbCBhc3MhCg== | perl -0MMIME::Base64 -e 'print decode_base64 <>'
(it's one line, $ is the shell prompt) or like this:$ perl -0MMIME::Base64 -e 'print decode_base64 <>' < inputfile > outputfile
(also one line) or you can omit the "<"$ perl -0MMIME::Base64 -e 'print decode_base64 <>' inputfile > outputfile
so you don't write the inputfile content to filter's standard input, but give the "inputfile" file name as the fist command-line argument. Every good filter should work like this. That way you can use input divided into parts$ perl -0MMIME::Base64 -e 'print decode_base64 <>' input-part1 input-part2 > outputfile
which has the same effect as$ cat input-part1 input-part2 | perl -0MMIME::Base64 -e 'print decode_base64 <>' > outputfile
but internally works totally different, which is however transparent in Perl, thanks to the magical <> diamond operator. -
Re:Mod This Up
Mod this up! Indeed, this is a HORRIBLE script, stupid idea, lame lame lame.
Poeple, can't you see that it was a joke? In fact, quite a good one, for anyone who knows anything about Perl and CGI.And about ";rm -rf
/;" as a query, I hope you don't run your CGI scripts with write privileges to your whole filesystem! Don't get me wrong, I always use taint mode and I always tell people to use it as well. It's just that this example can be quite misleading. If the CGI script can possibly remove the root directory, than you have a much more serious problem than the script itself.By the way, nice moderation: someone posts a script as an obvious joke -- it's Score:3, Informative. Then, someone says it's a horrible script -- again, it's Score:3, Informative. I wonder if people who moderated this thread, have ever read it, not to say about understanding the subject... Ok, I can understand that someone didn't get the joke and it's not moderated as Funny... But Informative?! That script doesn't even work for God's sake!
-
Re:What I really want to see...All this stuff is documented somewhere, you just have to know where to find it
:) But I don't know exactly what you're expecting here -- all this is obviously not going to be found in one book. I mean, this story is talking about a book review for a book that's 1,000 pages, and one of the complaints is that it's "too sketchy". How long would a book be that covers all the stuff you're talking about, from basic user-level stuff (reading a PostScript file) to basic software engineering theory (CASE, revision control systems) to advanced programming stuff (making branches in CVS)? 10,000 pages? 100,000 pages?For general programmer-level stuff, a good place to start would be Eric Raymond's Software Release Practice HOWTO. The GNU coding standards and maintainer information provide guidance for practices on the GNU project; although other open source projects will not follow all of these practices, they give you a good idea of how things are generally organized. Sourceforge itself has pretty good documentation. There are various guides to sending patches (the diff manual is also good reading for this). There is a book on autoconf. There are several documents on CVS; an interesting one is the CVS best practices HOWTO. It's fairly new (November 20, 2001) and still pretty sketchy, but perhaps it will evolve into a more complete best practices guide (the author is soliciting input, so this is a chance to contribute).
And, of course, nearly every Open Source software package comes with some sort of manual. (This contrasts with proprietary Windows applications, which seem to expect you to buy some sort of proprietary book on the side, in addition to the proprietary application you have already bought.) E.g., the the GCC manual, the GNU Make manual, the Perl manual, the Python tutorial, and so on. Although these are not always ideal for the beginner they will certainly be a useful reference to keep handy.
-
Re: dweomer
I always wondered if that was a real word or not. It is apparently not in the OED. Maybe someone should email the author of perlopentut and make him cough up his source for it!
-
Re:mmmm
-
Re:And if you need Slash hosting...
See perlfaq8 on keeping your own module directory. Just install the different versions to different paths, and change @INC appropriately, maybe with a SetEnv directive in your httpd.conf. Easy.
-
Re:PERL - the "Write-Only" language...I've had that problem with PERL, but then I discovered its predecessor, Perl. It's a much nicer language -- it has warnings, an optional pedantic compiler mode, lexical variables, embedded comment support, a debugger, copious documentation, numerous libraries, and active user communities. Best of all, it's not limited to CGI!
If you've had a bad experience with PERL, give Perl a try!
-
Re:More eclectic, less practical...Yes, I know you can use for as an abbreviation of foreach, but I was not referring such syntactic sugar. I was referring to the difference between the statement for(;;) and the foreach scalar, array.
For example:
for (my $j = 0; $j != @ary2; $j++) {
#do something with $ary2[$j]
}
and a foreach loop:
for my $jet (@ary2) {
#do something with $jet
}
The Perl Manual has this to say on the matter.
It's [foreach] cleaner, safer, and faster. It's cleaner because it's less noisy. It's safer because if code gets added between the inner and outer loops later on, the new code won't be accidentally executed. The next explicitly iterates the other loop rather than merely terminating the inner one. And it's faster because Perl executes a foreach statement more rapidly than it would the equivalent for loop.
The example has merit and is quite pertinent to the discussion. The foreach construction allows Perl to better understand your intention. It takes advantage of that knowledge to increase its efficiency. Hence my original point. -
Re:Good Thing BetterIt actually *is* an acronym...Practical Extraction and Reporting Language.
It's not an acronym. Check the FAQ.
[N]ever write "PERL", because perl isn't really an acronym, apocryphal folklore and post-facto expansions notwithstanding.
-
another OSS example...Perl looks like it followed more or less the same pattern. Perl 1.000 was released in December '87, Perl 5.000 in October '94, and by December '97 it was up to 5.004_56.
If you look at the "selected release sizes" table, there was a big jump in "core + lib + ext" from 4.036 (798K) to 5.000 (1504K), and a big jump in the documentation size from 5.003_07 (976K) to 5.004 (1587K).
Does anyone have the Camel Book sales figures from 1991 (when it was first published) to the present?
-- -
Re:Algorithms
There is even a Perl module that can verify checksums for you.
-
Re: Mixing code and data - complete agreement
I have found myself writing a templating mechanism in perl,
AAARGH! Another one! Another goddamn DIY html templating mechanism! Have you ever *thought* about looking on CPAN? Do you know that there are dozens of different html templating/perl embedding packages out there already?
Code reuse. It's a good idea. This means you. Do some research before you start typing.
Here's one:
www.perldoc.com - HTML::TemplateHere's another:
www.perldoc.com - CGI::FastTemplateAnd here's an archived thread of people who know more than we do talking about these things:
templating:html_perl_separation_&_perl_embeddingPersonally, I recommend Mason. When in doubt, always go with the most powerful tool you can find: so you know the choice won't limit you later. And yes, it is possible to use Mason in an organization where the HTML people are too stupid to be let near perl: I've seen it done. You just keep the Mason calls simple, and keep the complexities out of their face.
-
Re: Mixing code and data - complete agreement
I have found myself writing a templating mechanism in perl,
AAARGH! Another one! Another goddamn DIY html templating mechanism! Have you ever *thought* about looking on CPAN? Do you know that there are dozens of different html templating/perl embedding packages out there already?
Code reuse. It's a good idea. This means you. Do some research before you start typing.
Here's one:
www.perldoc.com - HTML::TemplateHere's another:
www.perldoc.com - CGI::FastTemplateAnd here's an archived thread of people who know more than we do talking about these things:
templating:html_perl_separation_&_perl_embeddingPersonally, I recommend Mason. When in doubt, always go with the most powerful tool you can find: so you know the choice won't limit you later. And yes, it is possible to use Mason in an organization where the HTML people are too stupid to be let near perl: I've seen it done. You just keep the Mason calls simple, and keep the complexities out of their face.
-
Apache::MP3
Apache::MP3 allows for directory listings, playlists and shuffled play. Why be a radio station? We already have thousands if not millions of these. On-demand, baby, on-demand.
-
Re:Perl is the luggable of computer languages
Use the File::Spec module and you don't even need to remember a path separator if it is different. See the perlport manpage for all your portability needs.