> If you change $dbh->{RaiseError}=1 to $dbh->raise_error(1), what is it > you are proposing for DBI->connect( ..., {RaiseError=>1, PrintError=0} > )? Handle attributes are a series of name/value pairs.
Er, this is not exactly virgin territory here. Virtually every common post-wild-west-early-days (sorry DBI, CGI.pm ;) Perl 5 module uses some kind of simple "named attribute" interface. Look at DateTime for just one recent example. This is also the direction of Perl 6 interfaces. > What more natural way is there in Perl to deal with name/value pairs than a > hash? Boldly speaking for the Entire Perl Community (ha!) interfaces like this: $x->foo(..., {...}) are generally considered icky. Who here doesn't cringe when they see those curly braces in a newly downloaded CPAN module's POD? It's an annoying, problem-prone way to tack "extensibility" onto an API that has otherwise painted itself into a corner with too many positional params (*cough*bind_columns(undef, ...)) > And since hashes can be tied to provide privacy and encapsulation, > what rule does it break to use them other than the rule that objects > have round things at the end of their arrows rather than squiggly things? There are better ways to implement encapsulation and extensibility than tied hashes. They're called "objects" and "methods" :) If ties were sufficient and "just as good", then Perl 5 (and 6) would have no need for proper objects and methods. -John