FAQ-OMatic
view release on metacpan or search on metacpan
lib/FAQ/OMatic.pm view on Meta::CPAN
return @outary;
} else {
return @p;
}
}
sub quoteText {
my $text = shift;
my $prefix = shift;
# not sure why s/^/> /mg gives a "Substitution loop" error from some Perls.
# this is a workaround.
return join('', map { $prefix.$_."\n" } split(/\n/, $text));
}
sub untaintFilename {
# strips out most chars but 'A-Za-z0-9_-.' A little overly restrictive,
# but good for when you want to read a file but don't want
# user sneaking in '../', metachars, shell IFS, or anything
# sneaky like that.
my $name = shift;
if ($name =~ m/^([A-Za-z0-9\_\-\.]+)$/) {
return $1;
} else {
return '';
}
}
sub cat {
my $filename = untaintFilename(shift()); # must be in metaDir
if ($filename eq '') {
return "['$filename' has funny characters]";
}
open (CATFILE, "<$FAQ::OMatic::Config::metaDir/$filename")
or return "[can't open '$filename': $!]";
my @lines = <CATFILE>;
close CATFILE;
return join('', @lines);
}
# returns true to enable original DBM-based search database code.
# (in false mode, search is linear scans of files. Slow, but robust.)
sub usedbm {
return $FAQ::OMatic::Config::useDBMSearch || '';
}
sub checkLoadAverage {
if (1) {
# this cobbled feature has no install-page hook; turn it off for now.
return;
}
my $uptime = `uptime`;
$uptime =~ m/load average: ([\d\.]+)/;
my $load = $1;
if ($load > 4) {
FAQ::OMatic::gripe('abort',
"I'm too busy for that now. (I'm kind of a crummy PC.)");
}
}
# Return the integer prefix to this string, or 0.
# Used to fix "argument isn't numeric" warnings.
sub stripInt {
my $str = shift;
if (not defined $str) {
return 0;
}
if (not $str =~ m/^([\d\-]+)/) {
return 0;
}
return $1;
}
'true';
( run in 2.368 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )