Задачка...

Решил себя проверить, на что я способен, в плане Perl конечно :)
Задачка в общем-то простая, надо написать функцию которая будет выводить данные в виде таблички, как в консольном-mysql.
Т.е. запускаем функцию так:
write_table(1, 2, "aa", "bb");
и оно напечатает:

+----+----+
| aa | bb |
+----+----+

т.е. одна строка, два столбца и инфа для вывода, во всех следующих параметрах..

Вот что у меня получилось:

sub write_table
{
	my ($width, $heigth) = @_;
	my $data_id = 2;
	my $border = 0;
	for (my $i = 0; $i < $heigth; $i++)
	{
		# разделители между строками
		$border = '-' x length($_[$data_id]) . '--';
		print '+';
		for (my $k = 0; $k < $width; $k++)
		{
			print $border . '+';
		}
		print "\n";
		# разделители между записями
		for (my $j = 0; $j < $width; $j++)
		{
			print "| ";
			print $_[$data_id], " ";			
			$data_id++;
		}
		print "|";
		print "\n";
	}
	my $new_border = \$border;
	print '+';
	for ($k = 0; $k < $width; $k++)
	{
		print $$new_border . '+';
	}
}
write_table(2, 2, "aa", "bb", "cc", "dd", "ee", "ff", "gg", "hh", "ii");

Криво конечно, еще не доведено до ума. (если данные разноый длинный, то надо решить как формировать ячейки для них. По максимальному размеру или еще как..
Может быть можно сделать, как-то изящнее, по Perl'овски ?

По Perl'овски -

По Perl'овски - найти в CPAN готовый модуль и написать статью как его использовать :)
А если хочется занять руки делом - улучшить готовый модуль из CPAN, или хотя-бы его хорошенько погонять на реальных данных и написать bugreport/feature request.

Не так:) По

Не так:) По перловски будет воспользоваться форматами.

man perlform

Было лень

Было лень вспоминать форматы :)

А на CPAN действительно есть очень неплохие готовые модули для автоматического рисования ascii табличек, причем настраиваются символы разделителей и тп (внутрь заглядывать тоже было лень, весьма возможно, они как раз форматы и используют).

Насколько я

Насколько я понял, при помощи их можно сделать, если заранее известны параметры таблицы (шаблона).
------------------
use Source();