#!/usr/bin/env perl use strict; use warnings; use 5.10.0; use Time::HiRes qw(sleep); use Term::ReadKey qw(GetTerminalSize); use File::Slurp; my @snowflakes = qw(❄ ❅ ❆); my ($width, $height) = GetTerminalSize(); my $cpu_count = grep { /^processor\s+: [0-9]/ } read_file('/proc/cpuinfo'); while (1) { my ($load) = (read_file('/proc/loadavg') =~ m/^([\d.]+)/); my $heaviness = int($load / $cpu_count); for (0 .. $heaviness) { my $flake = $snowflakes[ rand @snowflakes ]; say ' ' x int(rand($width)) . $flake; } if ($heaviness > 0) { sleep (1 / $heaviness) } else { sleep .75; } }