X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage.pm;h=9f7ed6834eefa971c8af5b1ae79309aae7d8e18a;hb=d5dedbd62928f65a9071b4d9b6d56c6b663a073b;hp=e8bc77be0908ef1349873bf1fc58dc339da0309c;hpb=fd323bf1046faa7de5a8c985268d80ec5b703361;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage.pm b/lib/DBIx/Class/Storage.pm index e8bc77b..9f7ed68 100644 --- a/lib/DBIx/Class/Storage.pm +++ b/lib/DBIx/Class/Storage.pm @@ -7,7 +7,7 @@ use base qw/DBIx::Class/; use mro 'c3'; use DBIx::Class::Exception; -use Scalar::Util(); +use Scalar::Util 'weaken'; use IO::File; use DBIx::Class::Storage::TxnScopeGuard; use Try::Tiny; @@ -85,7 +85,7 @@ storage object, such as during L. sub set_schema { my ($self, $schema) = @_; $self->schema($schema); - Scalar::Util::weaken($self->{schema}) if ref $self->{schema}; + weaken $self->{schema} if ref $self->{schema}; } =head2 connected @@ -187,7 +187,8 @@ transaction failure. =cut sub txn_do { - my ($self, $coderef, @args) = @_; + my $self = shift; + my $coderef = shift; ref $coderef eq 'CODE' or $self->throw_exception ('$coderef must be a CODE reference'); @@ -199,19 +200,21 @@ sub txn_do { my $wantarray = wantarray; # Need to save this since the context # inside the try{} block is independent # of the context that called txn_do() + my $args = \@_; + try { # Need to differentiate between scalar/list context to allow for # returning a list in scalar context to get the size of the list if ($wantarray) { # list context - @return_values = $coderef->(@args); + @return_values = $coderef->(@$args); } elsif (defined $wantarray) { # scalar context - $return_value = $coderef->(@args); + $return_value = $coderef->(@$args); } else { # void context - $coderef->(@args); + $coderef->(@$args); } $self->txn_commit; } @@ -333,7 +336,7 @@ sub txn_scope_guard { =head2 sql_maker Returns a C object - normally an object of class -C. +C. =cut