Difference between revisions of "Coding Gotchas"

From Dreamwidth Notes
Jump to: navigation, search
(Created page with "This page has a list of random weird Perl and DW gotchas == Gotchas == === use strict + my $foo if === <source lang="perl"> use strict; my $x = -1 if 0; # this condition is s...")
 
Line 2: Line 2:
  
 
== Gotchas ==
 
== Gotchas ==
 +
 +
=== LJ::Entry->new always returns an LJ::Entry (DW) ===
 +
 +
<source lang="perl">
 +
 +
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;
 +
 +
</source>
 +
 +
Returns
 +
 +
<source>
 +
Entry 1 is defined
 +
Entry 2 is defined
 +
Entry 2 is valid
 +
</source>
 +
 +
=== You can modify ... ===
 +
  
 
=== use strict + my $foo if ===
 
=== use strict + my $foo if ===
Line 8: Line 33:
 
use strict;
 
use strict;
  
my $x = -1 if 0; # this condition is supposed to fail.
+
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, persistant across requests* $x
 
</source>
 
</source>
 +
 +
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.
 
strict does '''not''' complain about this.
  
Do the following instead
+
Do the following instead:
  
 
<source lang="perl">
 
<source lang="perl">

Revision as of 20:44, 8 March 2011

This page has a list of random weird Perl and DW gotchas

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

You can modify ...

use strict + my $foo if

use strict;
 
my $x = -1 if 0; # intentional false, for example.
$x = 1; # This accesses a *global, persistant 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;