#!/usr/bin/perl use strict; use warnings; use feature 'say'; sub calc_sunrise_sunset { # some astro math here } my ($sunrise_hour, $sunrise_minute, $sunset_hour, $sunset_minute) = calc_sunrise_sunset(); open my $pipe,'|-','crontab','-' or die "Can't run crontab: $!"; say $pipe "0 0 * * * $0"; # keep this script running every day at midnight say $pipe "$sunrise_hour $sunrise_minute * * * /usr/local/bin/move_curtains open"; # open at sunrise say $pipe "$sunset_hour $sunset_minute * * * /usr/local/bin/move_curtains close"; # close at runset close $pipe;