in reply to Stylish Tk clock -- oneliner

You can use print to output a string, no need for Tk. This is what Tk makes possible:
#! /usr/bin/perl use strict; use warnings; use Tk; my $pi = 2 * atan2 1, 0; sub clock { my ($c) = @_; my ($h, $m, $s) = (localtime)[2, 1, 0]; $m += $s / 60; $h = 5 * ($h % 12) + $m / 12; draw($h, 3, 50, $c); draw($m, 2, 100, $c); draw($s, 1, 100, $c); } sub ftime { sprintf "%02d:%02d:%02d", (localtime)[2, 1, 0] } sub draw { my ($alpha, $w, $l, $c) = @_; my $my = ($alpha < 15 || $alpha > 45) ? -1 : 1; my $mx = $alpha > 30 ? -1 : 1; $alpha = $alpha * 2 * $pi / 60; my $x = $mx * $l * sin $alpha; my $y = $my * sqrt($l ** 2 - $x ** 2); $x = -$x if $alpha >= $pi; $c->createLine(100, 100, 100 + $x, 100 + $y, -width => $w, (-fill => 'grey') x ($w == 1)); } my $mw = MainWindow->new(-height => 200, -width => 200, -title => ftime()); my $c = $mw->Canvas(-height => 200, -width => 200)->pack; $mw->repeat(1000, sub { $c->delete('all'); clock($c); $mw->configure(-title => ftime()); }); MainLoop();
One-linerification left as an exercise to the reader.

map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]

Replies are listed 'Best First'.
Re^2: Stylish Tk clock -- oneliner
by Tux (Canon) on May 14, 2021 at 08:50 UTC

    Or just use Tk::Clock and have all of that and more in a one-liner :)

    $ perl -MTk -MTk::Clock -we'MainWindow->new->Clock->pack;MainLoop'

    So, that is my one-liner to have a fancy clock in Perl/Tk.


    Enjoy, Have FUN! H.Merijn