DBD-Informix

 view release on metacpan or  search on metacpan

examples/fixin.pl  view on Meta::CPAN


# Process each file.
FILE: foreach $filename (@ARGV)
{
	open(IN, $filename) || ((warn "Can't process $filename: $!\n"), next);
	$_ = <IN>;
	next FILE unless /^#!/;		# Not a hash/bang file

	chop($cmd = $_);
	$cmd =~ s/^#! *//;
	($cmd, $arg) = split(' ', $cmd, 2);
	$cmd =~ s!^.*/!!;

	# Now look (in reverse) for interpreter in absolute path

	$found = '';
	foreach $dir (@absdirs)
	{
		if (-x "$dir/$cmd")
		{
			warn "Ignoring $found\n" if $verbose && $found;
			$found = "$dir/$cmd";
		}
	}

	# Figure out how to invoke interpreter on this machine

	if ($found)
	{
		warn "Changing $filename to $found\n" if $verbose;if ($does_hashbang)
		{
			$_ = "#!$found";
			$_ .= ' ' . $arg if $arg ne '';
			$_ .= "\n";
		}
		else
		{
			$_ = <<EOF;
:
eval 'exec $found $arg -S \$0 \${1+"\$@"}'
	if \$running_under_some_shell;
EOF
		}
	}
	else
	{
		warn "Can't find $cmd in PATH, $filename unchanged\n" if $verbose;
		next FILE;
	}

	# Make new file if necessary
	if ($filename eq '-') { select(STDOUT); }
	else
	{
		rename($filename, "$filename.bak") ||
			((warn "Can't modify $filename"), next FILE);
		open(OUT, ">$filename") ||
			die "Can't create new $filename: $!\n";
		($def, $ino, $mode) = stat IN;
		$mode = 0755 unless $dev;
		chmod $mode, $filename;
		select(OUT);
	}

	# Print the new #! line (or the equivalent) and copy the rest of the file.
	print;
	while (<IN>)
	{
		print;
	}
	close IN;
	close OUT;
}



( run in 1.593 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )