#!/usr/bin/perl use warnings; use strict; update_table( name => 'test_name', phone => 'test_phone', city => 'test_city', country => 'test_country' ); update_table( name => 'test_name', phone => 'test_phone', country => 'test_country' ); update_table(name => 'test_name', city => 'test_city'); sub update_table { my (%params) = @_; die "name parameter is required by update_table ()\n" if !exists $params{name}; my @fieldNames = grep {$_ ne 'name'} keys %params; my @fields = map {"$_ = *"} @fieldNames; my $sql = "UPDATE table SET "; my @values = (@params{@fieldNames}, $params{name}); $sql .= join ', ', @fields; $sql .= " WHERE name = '*'"; print "$sql [values are @values]\n"; return 1; }