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 )