use Fcntl qw( :flock ); open FILE, "some/file" || die $!; # $! contains the error message flock FILE, LOCK_EX; # exclusive lock flock FILE, LOCK_SH; # shared lock flock FILE, LOCK_UN; # release lock
use Fcntl qw( :flock ); open FILE, ">>messages.log"; flock FILE, LOCK_EX; # if the lock is currently # held, this will wait for it to be released print FILE, "$message\n"; flock FILE, LOCK_UN; # release lock (unblocking # other processes that were waiting)
my $EEXIST = 17; # file exists
sub lockFile {
my $alias = shift;
my $n = 0;
$lock = "$alias.lock";
while (mkdir($lock, 0555) == 0) {
$! == $EEXIST ||
&AbortScript("can't make $lock: $!\n");
$n++ < 30 ||
&AbortScript("timed out waiting for $lock\n");
sleep(1);
}
}
dbmopen(%db, "some/database", 0666); dmbclose(%db);
$db{$key} # retrieve
$db{$key} = $value; # store
use CGI;
use CGI::Carp;
dbmopen(%db, "email_db", 0666) ||
die "could not open email_db";
my $q = new CGI;
print $q->header("text/html");
my $user = $q->param("user");
if (exists $db{$user}) {
print "The email address for user $user is: ";
print $db{$user}, "\n";
} else {
print "User $user not found\n";
}
dbmclose(%db);
use CGI;
use CGI::Carp;
dbmopen(%db, "email_db", 0666) ||
die "could not open email_db";
my $q = new CGI;
print $q->header("text/html");
my $user = $q->param("user");
my $email = $q->param("email");
$db{$user} = $email;
print "The following record has been added:<br>\n";
print "$user => $email\n";
dbmclose(%db);
sub requestLock {
my $alias = shift;
my $n = 0;
my $lock = $alias . ".lock";
while (mkdir($lock, 0555) == 0) {
$! == $EEXIST ||
die "can't make $lock: $!";
$n++ < 30 ||
die "timed out waiting for $lock";
sleep(1);
}
}
sub releaseLock {
my $alias = shift;
my $lock = $alias . ".lock";
rmdir($lock);
}
use CGI;
use CGI::Carp;
# include definitions of
# requestLock and releaseLock here
dbmopen(%db, "email_db", 0666) ||
die "could not open email_db";
requestLock("email_db");
my $q = new CGI;
print $q->header("text/html");
my $user = $q->param("user");
my $email = $q->param("email");
$db{$user} = $email;
print "The following record has been added:<br>\n";
print "$user => $email\n";
releaseLock("email_db");
dbmclose(%db);
my $FieldSeparator = ":";
sub encode {
my $valueRef = shift;
my %value = %$valueRef;
my @value = %value; # (key1 val1 key2 val2 ...)
my $value = join($FieldSeparator, @value);
return $value;
}
sub decode {
my $value = shift;
my @value = split($FieldSeparator, $value);
my %value = @value;
return %value;
}
my %profile = ( name => "Bob", email => "bob\@home.com", age => 32); dbmopen(%db, "profiles", 0666); # encoded data # email:[email protected]:name:Bob:age:32 my $encoded = encode(\%profile); my $key = $profile{name}; $db{$key, $encoded}; # store in database dbmclose(%db);
dbmopen(%db, "profiles", 0666);
my $key = "Bob";
my $decoded = $db{$key};
# decoded data
# (name => "Bob", email => "bob\@home.com", age => 32);
my %decoded = decode($encoded);
dbmclose(%db);
CREATE TABLE address ( name CHAR(20), location CHAR(30), age INTEGER )
INSERT INTO address
(name, location, age)
VALUES
('Bob', 'Ottawa', 33)
SELECT *
FROM address
SELECT name, location
FROM address
SELECT *
FROM address
WHERE age > 30
SELECT name
FROM address
WHERE location = 'Ottawa'
AND age > 30
SELECT *
FROM address
WHERE name LIKE 'B%'
UPDATE address
SET age = age + 1
WHERE name = 'Alice'
AND location = 'Toronto'
DELETE FROM address
WHERE name = 'Alice'