perl-begin / DONE

shl...@13c2ddb8-… 4cdeef6 
Shlomi Fish 1b3dcd7 
shl...@13c2ddb8-… 4cdeef6 

shl...@13c2ddb8-… 7ff4e74 


shl...@13c2ddb8-… d0b2e09 

shl...@13c2ddb8-… 785e315 

shl...@13c2ddb8-… 80affde 




shl...@13c2ddb8-… e2f2e69 



shl...@13c2ddb8-… 80affde 
shl...@13c2ddb8-… f020f3e 

shl...@13c2ddb8-… b0f24e4 
shl...@13c2ddb8-… d30ac34 

shl...@13c2ddb8-… 4ea8a6a 







shl...@13c2ddb8-… 65edae4 

shl...@13c2ddb8-… f0a107b 

shl...@13c2ddb8-… ea21484 



shl...@13c2ddb8-… 5521f5e 

shl...@13c2ddb8-… e8a7708 

shl...@13c2ddb8-… 2934cb0 

shl...@13c2ddb8-… 8fc80e5 




shl...@13c2ddb8-… adcd367 

shl...@13c2ddb8-… 39ccf3e 
shl...@13c2ddb8-… 38b908d 
shl...@13c2ddb8-… 42620a4 
shl...@13c2ddb8-… 34d2a61 
shl...@13c2ddb8-… e54a705 
shl...@13c2ddb8-… c39a9fe 

shl...@13c2ddb8-… 47592f8 

shl...@13c2ddb8-… 61415e4 
shl...@13c2ddb8-… 966f4ba 
shl...@13c2ddb8-… 27d3a55 

shl...@13c2ddb8-… 85c625a 

shl...@13c2ddb8-… 95ddce8 
shl...@13c2ddb8-… d8d1114 
shl...@13c2ddb8-… a7078ca 
shl...@13c2ddb8-… ac4b7da 
shl...@13c2ddb8-… 2140648 
Shlomi Fish 1b3dcd7 
shl...@13c2ddb8-… f122059 

shl...@13c2ddb8-… 8b6412a 


shl...@13c2ddb8-… 22e5098 

shl...@13c2ddb8-… c3f37f4 
Shlomi Fish 1b3dcd7 
shl...@13c2ddb8-… a91f230 


shl...@13c2ddb8-… e455ac6 


shl...@13c2ddb8-… ef8fc19 
shl...@13c2ddb8-… 517faee 
shl...@13c2ddb8-… 2534979 


shl...@13c2ddb8-… 720726e 


shl...@13c2ddb8-… cd357a7 




shl...@13c2ddb8-… 0d15d82 


shl...@13c2ddb8-… e39d25c 

shl...@13c2ddb8-… 45c166d 






shl...@13c2ddb8-… 407e9e2 

shl...@13c2ddb8-… 55bd558 

shl...@13c2ddb8-… 87c3745 

shl...@13c2ddb8-… ddbf434 

shl...@13c2ddb8-… 3b0c7a3 


shl...@13c2ddb8-… 84e46c9 

shl...@13c2ddb8-… 7fbb0eb 

shl...@13c2ddb8-… c4ef4b5 

shl...@13c2ddb8-… 4800e6b 
shl...@13c2ddb8-… 3f0da7a 

shl...@13c2ddb8-… 84e46c9 
shl...@13c2ddb8-… be3382b 


shl...@13c2ddb8-… 2140dd5 



shl...@13c2ddb8-… 5362dbf 

Shlomi Fish 763beb5 











Shlomi Fish 3c7b711 











Shlomi Fish 1ba5690 



Shlomi Fish ede778d 
Shlomi Fish 1b3dcd7 
Shlomi Fish ede778d 

Shlomi Fish ea10fb8 
Shlomi Fish 8e148c5 
Shlomi Fish c96625f 



Shlomi Fish 277f43a 
Shlomi Fish 6ace343 

Shlomi Fish 0c47810 


Shlomi Fish f36bc37 
Shlomi Fish 2d23e24 


Shlomi Fish f36bc37 


Shlomi Fish 16b8f7c 



Shlomi Fish 9453d23 

Shlomi Fish f3fc051 
Shlomi Fish 5e6fad0 
Shlomi Fish 41d6ebd 
Shlomi Fish aa8fb49 
Shlomi Fish 9a78709 


Shlomi Fish 62ed042 


Shlomi Fish 902f9a3 
Shlomi Fish 62ed042 
Shlomi Fish 86a168c 


Shlomi Fish d9d35d0 












Shlomi Fish 07f38e1 


Shlomi Fish b6f9fe8 




Shlomi Fish c2bf3d7 




Shlomi Fish abe910e 










Shlomi Fish 61acad8 

Shlomi Fish e8cac1a 

Shlomi Fish 22d940d 


Shlomi Fish 1bc4dfb 



Shlomi Fish 26f0253 



Shlomi Fish bf8c7a0 


Shlomi Fish 99cb35f 




Shlomi Fish e9a1cf6 
* Create a macro for a link to a CPAN distribution
(http://search.cpan.org/dist/MyDist-Here/), a self link (with MyDist-Here as
the contents), and a perldoc?MyModule::Here link.

* Put the TODO and DONE on the web-site so people will be able to view
them and contribute.

* Page about Bad Elements:
    - discuss commenting.
    - accessing object slots directly
        - use accessors.
    - Reference the sources the advice was taken from and further reference:
        - Perl Best Practices
        - The Ancient Perl pages on the Perl 5 Wiki.
        - chromatic's Modern Perl book.
        - advice given by people on Freenode's #perl and on the Perl beginners
    - ^ and $ in regexes.
        - ambiguous.
        - better use \A and \z to mean start-of-string and end-of-string.
        - with /m can be used for start-of-line / end-of-line.
        mailing list.
    - refactoring:
        - magic numbers.
    - string variables interpolated by themselves - "$myvar".

* Add Perl-Monks to more relevant pages.

* Add a page explaining about Perl 6.
    - New language.
        - Not compatible
    - Is it still Perl?
    - Perl 5 and CPAN derive inspiration from it.
    - This site focuses on Perl 5.

* Add a page about E-mail-handling.

* Add a page about optimizing / profiling / etc.

* OO Programming Section:
    - maybe add the list of OO modules I composed.
        - rejected because they will only be confusing.

* Fix the site-resources/ Web Forum detail.

* Add a page about ssh/telnet.

* Update the uses/ and topics/ pages with the sub-pages.


* Credit tm604 about the CSS style tip.

* Typo in src/links/index.html.wml - "Perlin".

* Page about Bad Elements:
    - Array element: @array[$idx] instead of $array[$idx].
    - using $a and $b as variable names.
    - last/next/redo/etc. without explicit LABELs.
    - Add a note about using $ARGV[0] and $ARGV[1].
    - abuse of $#array (like $#array + 1 for array length).
    - $array[$#array] instead of $array[-1]
    - Accessing the last element using $array[$#array] - use $array[-1]
    instead.
    - interpolating strings directly into regex.
        - either comment that you want to inject a sub-regex or use \Q and \E.
    - don't overuse $_ - it's prune to errors.
    - Mixing tabs and spaces.
    - qx/`....` instead of system().
        - also open.
    - Always add an explicit return from the subroutine.
        - <<return 0;>> instead of <<return;>>
    - varvarname - using a variable as a different variable's name.
    - leading underscores ("_") for non-API methods and functions.
    - print {$fh} @args instead of "print $fh @args" which is too easy to miss.
    - STDIN instead of ARGV.
    - modifying an array/hash while iterating over it.
    - comments and identifiers in a foreign language.
    - avoid using perlform - use Perl6::Form instead (also see the text
    generation page).
    - C-style for loops.
        - rejected because it is a PBP-recommendation that we do not necessarily
        accept. They are shorter than the eqvuivalent while...continue loops.
    - http://www.stonehenge.com/merlyn/UnixReview/col52.html
        - $object->new() to create a new instance.
    - Law of Demeter
    - EEK
        - pass items from one subroutine to another.
            - use objects.
            - assign them to slots.
    - refactoring:
        - long functions and methods.
        - duplicate code.
    - using map instead of for/foreach/while (each) for its side-effects.
    - using grep instead of first/any/all/etc or a hash lookup.

* Link to Perl/Qt once it's ready.

* Revamp the Testimonials on the pages.
    - What about it?

* Link to Fomberg's Hebrew with Perl site.
    - linked from the Perl 5 Wiki "Hebrew" Page:
        - https://www.socialtext.net/perl5/index.cgi?hebrew
        - It didn't belong anywhere on the site.

* Add screenshots to the IDEs page and other relevant pages.
    - there are screenshots.

* Restore a copy of "Life with CPAN" under /topics/cpan/ .

* Add a page with exercises/challenges:
    - Learning Perl
    - Beginning Perl
    - Project Euler
    - 99 Problems in Lisp
    - Perl Quiz-of-the-Week

* Add Plack/PSGI to src/uses/web/index.html.wml.

* Fix the other links in the life-with-cpan.

* Add a section about graphical debugger front-ends.

* Add a page about modules.

* Add a recommendation to read Modern Perl in the various topical pages.
    - create a tag for that.

* Add more id="" attributes to the <h2 /> | <h3 /> | etc. tags.

* Bad elements page:
    - The FileHandle module.
    - include/do/eval "$file_contents" instead of using a module.
        - pre-req - the modules page.
    - global variables as an interface to a module.
    - declaring all variables at the top of the file, instead of when they
    are first used, and in the innermost scope.

* Add a page about games and multimedia programming using Perl.
    - See the IRC conversation on #perl .

* Bad elements page:
    - Switch.pm.
    - threads.

* Add a page about "Perl"-vs.-"perl"-vs.-"PERL".

*
<<<
I enjoyed the article, "Perl Elements to Avoid" at perl-begin.org.

However, I suggest it isn't sufficient to tell people what to not do. They need
suggestions on suitable alternatives. "Avoid  nested calls" is fair advice, but
now the beginner is lost, with no alternatives. They can figure out to save
intermediate results, and call routines on those, but that is just a more
verbose  way of doing the same thing. The beginner is unlikely to consider
delegation.
>>>

* Add a page about web automation (maybe networking in general) :
    - WWW::Mechanize.
    - LWP
    - WWW::Curl and LWP::Curl
    - HTML::TreeBuilder / HTML::TreeBuilder::LibXML.
    - WWW::Selenium
    - Mozilla::Mechanize
    - IE::Mechanize
    - Networking modules for various protocols.
        - refer to the email page.
    - Web::Scraper

* Bad elements page:
    - using the ternary conditional operator (?:) instead of
    if/else for statements with side-effects.
        - see http://www.nntp.perl.org/group/perl.beginners/2012/04/msg120480.html
    - nested top-level subroutines.
        - sub outer { ... sub inner { ... } }
        - lexical variable initialisation problem.
        - use closures instead.
    - calling too much for the shell for help.
    - missing semicolons in the last statements of blocks.
    - list-form of open with potentially one argument:
        - will be interpreted as a shell command.
        - no way to avoid it for one argument.
        - use IPC::Run or IPC::System::Simple
    - trailing whitespace.
    - Using string eval.
        - Two or more /e flags for s/// .

* Update the modules_and_objects_perldocs block - remove perlboot, perltoot,
perlbot, and add perlootut .

* Mirror http://shlomif-tech.livejournal.com/35301.html (Code/Markup injection
) locally and enhance it.

* Bad elements page:
    - "-param" (parameters starting with a dash) for subroutines or methods.
        - should be plain names instead.
    - Code/Markup injection:
        - shell code injection.
        - cross-site-scripting / HTML injection.
        - SQL injection.
    - initialising arrays (not array refs) using [...] and hashes (not
    hashrefs) using { ... }.
    - long lines in source code.
    - grep !/\A\./ for getting rid of "." and ".." in readdir().
    - assigning a list to a scalar.
    - Regular expressions starting or ending with .*? or .*

* Update the copy of Modern Perl to the latest edition.

* "So benchmark your code, see how well it performs and then continue
reading this page if it is indeed too slow." - missing comma.

* Mention Strawberry Perl and DWIM Perl on the MS Windows Page.

* Page about Perl Humour.
    - http://perl.net.au/wiki/Perl_Humour .

* Further work on src/uses/chat-scripting/index.html.wml .
    - Maybe trim the introduction.
        - remove the what is IRC? stuff almost completely and just say
        "Perl has good support".
            - we can assume people will know what it is, and if not
            there's the link.
    - Add Jabber/XMPP.
    - Add the other frameworks:
        - <perlbot> rindolf: Don't parse IRC with regex! See
          POE::Component::IRC, Bot::BasicBot. Avoid Net::IRC. See also
          http://poe.perl.org/ or Net::Async::IRC or AnyEvent::IRC .
        - Not sure it's a good idea.

* Books:
    - http://oreilly.com/catalog/9780596004927/ - Programming Perl, 4th ed.
    - http://oreilly.com/catalog/0636920018452/ - Learning Perl, 6th ed.

* Add a tutorial on how to create CPAN distributions.
    - an up-to-date one is really needed.
    - There is one at http://www.perlmonks.org/?node_id=879515 .

* Bad elements page:
    - Recursively iterating over directories and sub-directories instead of
    using File::Find, F::F::O, File::Next, etc.
    - Using File::Find and friends for listing the entries of a single
    directory (non-recursively).
    - Populating an array of references with the same reference:
        - ([]) x $count
        - my @array;
          my @array_of_arrays;
          foreach my $elem (@other_array)
          {
              .
              .
              .
              push @array_of_arrays, \@array;
          }
    - Conditional "my"s:
        - my $x if EXPR();
    - Using one variable for two different purposes
        - assignment to a different value in the middle of the subroutine.

* Add http://rosettacode.org/wiki/Main_Page .

* #perl FAQ:
    - randomising an array:
        - shuffle.
        - picking a random element: $my_array[rand @my_array]
    - references.
        - What's the difference between an array reference and an array?
        - Same for hash.
        - "I've tried doing $my_array_ref[3] but it didn't work."

* Page about Bad Elements:
    - Premature Optimization.
    - clarify and expand the section about the open function:
        - give more examples for the anti-patterns:
            - not using lexical filehandles
            - using two-args open.
            - not using autodie or "or die".
    - Using version control.
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.