50 lines
877 B
Perl
Executable File
50 lines
877 B
Perl
Executable File
#!/usr/bin/perl
|
|
# SPDX-License-Identifier: MIT
|
|
#
|
|
# pesubst - replace strings in files
|
|
# written by Jan Engelhardt, 2004-2007
|
|
|
|
use Getopt::Long;
|
|
use strict;
|
|
|
|
my($p_dest, $p_src, $p_mod, $o_fit);
|
|
&Getopt::Long::Configure(qw(bundling pass_through));
|
|
&GetOptions(
|
|
"d=s" => \$p_dest,
|
|
"f" => \$o_fit,
|
|
"m=s" => \$p_mod,
|
|
"s=s" => \$p_src,
|
|
);
|
|
|
|
foreach my $file (@ARGV) {
|
|
if (!open(IN, "< $file")) {
|
|
warn "Could not open $file: $!\n";
|
|
next;
|
|
}
|
|
|
|
my $data = join("", <IN>);
|
|
close IN;
|
|
|
|
if ($o_fit) {
|
|
eval "\$data =~ s{$p_src}{".&fit_in($p_dest, length($p_src))."}g$p_mod";
|
|
} else {
|
|
eval "\$data =~ s{$p_src}{$p_dest}g$p_mod";
|
|
}
|
|
|
|
if (!open(OUT, "> $file")) {
|
|
warn "Could not reopen $file: $!\n";
|
|
next;
|
|
}
|
|
|
|
print OUT $data;
|
|
close OUT;
|
|
}
|
|
|
|
sub fit_in ()
|
|
{
|
|
my($str, $len) = @_;
|
|
$str = substr($str, 0, $len);
|
|
$str .= "\\x00" x ($len - length($str));
|
|
return $str;
|
|
}
|