NAME

Yandex::Tools - useful functions for Yandex daemons and programs.

LOGGING

use Yandex::Tools qw(/^/);

# logging
set_log_filename("/var/log/mylog");
if (!can_log()) {
  die ("can't log!\n");
}

print "will log to: " . get_log_filename() . "\n";

set_log_options({
  'rotate_size' => 1024*1024, # 1MB
  'rotate_keep_copies' => 2,
});

do_log("yoyo");

FILESYSTEM

use Yandex::Tools qw(/^/);

# test if you can write file (by creating it)
if (!can_write("/root/test123")) {
  die "can't write to /root\n!";
}

# read text file into array of lines, removing \r\n
my $f = read_file_array('/etc/passwd');
foreach my $line (@{$f}) {
  print $line . "\n";
}

# read file removing \r\n; returns undef if file doesn't exist
my $hostname = read_file_option('/etc/hostname');

# read file as is; returns undef if file doesn't exist
my $etc_passwd = read_file_scalar('/etc/passwd');

# read file as is; returns True on success, False otherwise
if (write_file_scalar('/etc/passwd', $etc_passwd)) {
  print "written successfully!\n";
}

# simply write some text to file
# (which would be read with read_file_option)
if (!write_file_option('/tmp/hostname', 'test')) {
  die "unable to write /tmp/hostname!";
}

# get filesystem object struct (fileinfo struct)
#
# $VAR1 = {
#   'uid' => 0,
#   'short_name' => 'passwd',
#   'mtime' => 1273586736,
#   'mode' => 420,
#   'size' => 1081,
#   'absolute_name' => '/etc/passwd',
#   'relative_name' => 'etc/passwd',
#   'type' => 'file',
#   'gid' => 0
#   };
#
my $fs_obj = fileinfo_struct({'absolute_name' => '/etc/passwd'});

# read directory entries into array (by default)
# of fileinfo structs (see above), does not recurse
# into directories, allows optional filtering
# of only-files or only-directories
#
my $mixed_array = read_dir('/etc', {'output_type' => 'arrayref', 'only-directories' => 1});

# read directory into hash (recursive),
# with relative entry name as a key
# and fileinfo struct as value
#
my $dir_struct = read_dir('/etc', {'output_type' => 'hashref'});

STRINGS

use Yandex::Tools qw(/^/);

# remove duplicate entries from array
#
my @arr = qw/1 2 3 4 5 1 2 3 4 5/;
my @uniq = array_clear_dupes(@arr);
print join(",", @uniq) . "\n";

# prints:
# 1,2,3,4,5

# replace all kinds of delimiters like
# multiple spaces, tabs, commas, ampersands, semicolons
# with just one space
my $str = canonize_delimiters($str);

# self explained:
if (!is_ascii(chr(1)) || !is_digital(chr(1))) {
  die "oops";
}

# match any of regexp
if (matches_with_one_of_regexps("something", ["one", "two", "some"])) {
  print "match!\n";
}

# allows to print anything without warnings
# even with `use warnings`. replaces undefined values
# with empty string
#
print safe_string(undef);

OTHER

# print callstack (for debugging)
#
print get_callstack();

# release candidate version of run_forked,
# cool external programs execution routine
# allowing time limiting and some other
# types of control.
#
# distributed widely in L<IPC::Cmd>,
# read documentation there.
#
my $r = run_forked("uptime");
print $r->{'stdout'};

# send mail (different mailers are tried)
#
send_mail({
  'to' => 'root',
  'subject' => 'test',
  'body' => 'test',
  });

AUTHORS

Petya Kohts <petya@kohts.ru>

COPYRIGHT

Copyright 2007 - 2011 Petya Kohts.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.