Difference between revisions of "Coding Gotchas"

From Dreamwidth Notes
Jump to: navigation, search
m (moved Gotchas to Coding Gotchas: fey says so)
Line 1: Line 1:
This page has a list of random weird Perl and DW gotchas
+
This page documents coding "gotchas" where things might not turn out how you expect them to.
  
== Gotchas ==
+
== Dreamwidth specific gotchas ==
  
 
=== LJ::Entry->new always returns an LJ::Entry (DW) ===
 
=== LJ::Entry->new always returns an LJ::Entry (DW) ===
Line 24: Line 24:
 
Entry 2 is valid
 
Entry 2 is valid
 
</source>
 
</source>
 +
 +
== General Perl gotchas ==
  
 
=== You can modify ... ===
 
=== You can modify ... ===
Line 52: Line 54:
  
 
my $x = -1 if 0; # intentional false, for example.
 
my $x = -1 if 0; # intentional false, for example.
$x = 1; # This accesses a *global, persistant across requests* $x
+
$x = 1; # This accesses a *global, persistent across requests* $x
 
</source>
 
</source>
  

Revision as of 20:49, 8 March 2011

This page documents coding "gotchas" where things might not turn out how you expect them to.

Dreamwidth specific gotchas

LJ::Entry->new always returns an LJ::Entry (DW)

my $entry = LJ::Entry->new( $u, ditemid => $deleted_ditemid );
print "Entry 1 is defined\n" if defined $entry;
print "Entry 1 is valid\n" if defined $entry->valid;
 
$entry = LJ::Entry->new( $u, ditemid => $valid_ditemid );
print "Entry 2 is defined\n" if defined $entry;
print "Entry 2 is valid\n" if defined $entry->valid;

Returns

Invalid language.

You need to specify a language like this: <source lang="html4strict">...</source>

Supported languages for syntax highlighting:

4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, algol68, apache, applescript, apt_sources, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, c_loadrunner, c_mac, caddcl, cadlisp, cfdg, cfm, chaiscript, cil, clojure, cmake, cobol, coffeescript, cpp, cpp-qt, csharp, css, cuesheet, d, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, j, java, java5, javascript, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nsis, oberon2, objc, objeck, ocaml, ocaml-brief, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, php-brief, pic16, pike, pixelbender, pli, plsql, postgresql, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, rails, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, s2, sas, scala, scheme, scilab, sdlbasic, smalltalk, smarty, spark, sparql, sql, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xorg_conf, xpp, yaml, z80, zxbasic


Entry 1 is defined
Entry 2 is defined
Entry 2 is valid

General Perl gotchas

You can modify ...

use strict;
 
my $x;
 
print "x is '$x'\n";
foo($x);
print "x is now '$x'\n";
 
sub foo { $_[0] = "bar"; }

Returns

Invalid language.

You need to specify a language like this: <source lang="html4strict">...</source>

Supported languages for syntax highlighting:

4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, algol68, apache, applescript, apt_sources, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, c_loadrunner, c_mac, caddcl, cadlisp, cfdg, cfm, chaiscript, cil, clojure, cmake, cobol, coffeescript, cpp, cpp-qt, csharp, css, cuesheet, d, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, j, java, java5, javascript, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nsis, oberon2, objc, objeck, ocaml, ocaml-brief, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, php-brief, pic16, pike, pixelbender, pli, plsql, postgresql, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, rails, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, s2, sas, scala, scheme, scilab, sdlbasic, smalltalk, smarty, spark, sparql, sql, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xorg_conf, xpp, yaml, z80, zxbasic


x is ''
x is now 'bar'

use strict + my $foo if

use strict;
 
my $x = -1 if 0; # intentional false, for example.
$x = 1; # This accesses a *global, persistent across requests* $x

The condition can be anything, and this bug only happens if the "my $x" line does not execute because of the condition, if the condition is true then it will end up using the local as expected.

strict does not complain about this.

Do the following instead:

use strict;
 
my $x;
$x = -1 if 0;
$x = 1;