サーバの大掃除のついでに、ユーザ権限でCPANライブラリを導入していたものを一掃したい。そのために、と、Stat::lsMode::format_modeをライブラリを使わずインライン実装する簡易関数をAIに書いてもらった。
Config::TinyのINIファイル読み書きを代替する関数
#!/usr/bin/perl
use Data::Dumper;
$ini_filename = "test.ini";
# *******************
# INI読み込み
my $config = read_ini($ini_filename);
if ( !defined($config) ) {
print("ini file not found\n");
exit(0);
}
my $str_temp = $config->{debug_section}->{debug_attr};
if ( !defined($str_temp) ) {
printf("value not found\n");
}
else {
printf( "[section] attr = %s\n", $str_temp );
}
print("---debug---\n");
print Dumper $config;
print("---debug---\n");
# *******************
# INI書き込み
$time = time();
( $sec, $min, $hour, $mday, $mon, $year, $wday ) = localtime($time);
$new_value = sprintf(
"%04d-%02d-%02d %02d:%02d:%02d",
$year + 1900, $mon + 1, $mday, $hour, $min, $sec
);
# 書き込み
my $config = {};
$config->{debug_section0}->{debug_attr0} = "dummy string 0";
$config->{debug_section}->{debug_attr} = $new_value;
$config->{debug_section}->{debug_attr2} = "dummy string 2";
$config->{debug_section2}->{debug_attr3} = "dummy string 3";
write_ini( $ini_filename, $config );
printf( "new value (%s) written\n", $new_value );
# *************
# INIファイルに書き込む (Config::Tiny 互換)
# param[0]: string ファイル名
# return: hash 全ての値を格納したハッシュ{セクション名}{値名}
sub read_ini {
my ($filename) = @_;
open my $fh, '<', $filename or return undef;
my %config;
my $section = '';
while ( my $line = <$fh> ) {
chomp $line;
$line =~ s/^\s+|\s+$//g; # 前後の空白除去
next if $line eq '' or $line =~ /^;/; # 空行・コメント除外
if ( $line =~ /^\[(.+?)\]$/ ) {
$section = $1;
$config{$section} ||= {};
}
elsif ( $line =~ /^([^=]+?)\s*=\s*(.*)$/ ) {
my ( $key, $value ) = ( $1, $2 );
$config{$section}{$key} = $value;
}
}
close $fh;
return \%config;
}
# *************
# INIファイルに書き込む (Config::Tiny 互換)
# param[0]: string ファイル名
# param[1]: hash 全ての値を格納したハッシュ{セクション名}{値名}
sub write_ini {
my ( $filename, $config_ref ) = @_;
open my $fh, '>', $filename or return 0;
foreach my $section ( sort keys %$config_ref ) {
print $fh "[$section]\n";
foreach my $key ( sort keys %{ $config_ref->{$section} } ) {
my $value = $config_ref->{$section}{$key};
print $fh "$key=$value\n";
}
print $fh "\n";
}
close $fh;
return 1;
}
省略された記事の残りの部分を表示する (Continue to read rest of this topic) »