diff --git a/perl-5.28.1-0.build.sh b/perl-5.28.1-0.build.sh
new file mode 100755
index 0000000..d9e966e
--- /dev/null
+++ b/perl-5.28.1-0.build.sh
@@ -0,0 +1,578 @@
+#! /bin/bash
+
+PKG=perl
+VERSION=5.28.1
+BUILD=0
+
+PREFIX=/pkg/$PKG-$VERSION-$BUILD
+if [ -n "$TESTING" ]; then PREFIX=/dev/shm/$PKG-$VERSION-$BUILD ; fi
+
+set -xe
+umask 022
+
+BUILD_TMPDIR=/dev/shm/$PKG-$VERSION-$BUILD.build.tmp
+test -d $BUILD_TMPDIR && rm -rf $BUILD_TMPDIR
+mkdir -p $BUILD_TMPDIR/home
+export TMPDIR=$BUILD_TMPDIR
+export HOME=$BUILD_TMPDIR/home
+
+exec </dev/null
+
+if [ -n "$REMOVE_BUILD_RELICTS" -a -d "$PREFIX" ]; then
+	# force complete rebuild, but keep downloads
+	cd $PREFIX
+	# sanity check before we go berserk
+	test -e build/perl-$VERSION.tar.gz || exit 1
+	find .     -maxdepth 1 -not -name .     -not -name build    -exec rm -rf {} \;
+	find build -maxdepth 1 -not -name build -not -name "*.tar*" -exec rm -rf {} \;
+fi
+
+mkdir -p $PREFIX
+cat >$PREFIX/profile <<-EOF
+	PATH=$PREFIX/bin:\$PATH
+	if [ -d $PREFIX/.compatlibs ]; then export LD_LIBRARY_PATH=$PREFIX/.compatlibs\${LD_LIBRARY_PATH:+:\$LD_LIBRARY_PATH} ; fi
+EOF
+. $PREFIX/profile
+
+# Tk test needs display
+#
+if [ -z "$DISPLAY" ]; then
+	echo "DISPLAY not set. Required for Tk tests." >&2
+	exit 1
+fi
+
+# If you hit errors and want to rerun from where you failed,
+# use "if false","fi" to avoid rebuilding everything before
+# the error.
+#
+# A good point to place the "if false" is here.
+#
+# Just uncomment and move the "fi" line to where
+# you want to restart.
+#
+#if false; then ######################################################### DEBUG
+#fi             ######################################################### DEBUG
+
+export MAKEFLAGS="-j $(nproc)"
+
+BUILDDIR=$PREFIX/build
+
+mkdir -p $BUILDDIR
+cd $BUILDDIR
+
+# The problem with a git checkout is, that the perl build system does many things
+# differentily when is sees .git - e.g. run additional developer checks.
+#test -d perl || git clone https://perl5.git.perl.org/perl.git
+#cd perl
+#git checkout "v$VERSION" ; git reset --hard
+
+test -e perl-$VERSION.tar.gz || wget http://www.cpan.org/src/5.0/perl-$VERSION.tar.gz
+test -d perl-$VERSION || tar xf perl-$VERSION.tar.gz
+cd perl-$VERSION
+
+# -d : use defaults for all answers.
+# -e : go on without questioning past the production of config.sh.
+# -s : silent mode, only echoes questions and essential information.
+# -Dusedevel : allow devel (uneven minor) versions. Prevents bin/perl->bin/perlVERSION symlink
+# -Duseshrplib : build shared perl library (required when perl is to be included in a shared library)
+# -DEBUGGING : add debugging code (perl -D)
+#
+./Configure -des -Duseshrplib -Dprefix=$PREFIX
+
+make -j$(nproc)
+
+# Note: If you get a failure in porting/utils test here, it might be, that we are
+# running cpan somewhere else which leads to an extra and unexpected "\n" being
+# emitted by CPAN.pm BEGIN and a failure of the test (which does "perl -c CPAN.pm")
+#
+make test
+make install
+
+cd $PREFIX;
+
+test -e $HOME/.cpan/CPAN/MyConfig.pm && rm $HOME/.cpan/CPAN/MyConfig.pm
+cpan</dev/null
+
+# Too many modules "recommend" stupid things like mod_perl
+# do not auto install recommended modules
+perl -MCPAN <<'_EOF_'
+  CPAN::HandleConfig->load();
+  CPAN::Shell->o('conf','recommends_policy',0);
+  CPAN::Shell->o('conf','commit');
+_EOF_
+
+cpan -u			# update everything we already have
+
+# After the update we have a new ExtUtils::MakeMaker.
+# Patch this version to avoid stomping on a perl bug
+# We've got this when building net-snmp (down below).
+# Errors:
+#    "panic: attempt to copy freed scalar"
+#    "Bizarre copy of HASH in list assignment#
+# this is from perl bug:
+#    https://rt.perl.org/Public/Bug/Display.html?id=77706
+# triggered by ExtUtils::MakeMaker.
+# This patch prevents this
+#
+
+(cd lib/site_perl/$VERSION/ExtUtils; patch -N -p1 < /src/mariux/patches/MakeMaker-0001-MakeMaker.pm-Avoid-triggering-perl-bug.patch) || true
+
+# These two with -T (without test), because the tests are interactive and access /dev/tty
+# Do these first, because they are required by Bundle::CPAN
+#
+cpan -T Term::ReadLine::Perl
+cpan -T Term::ReadLine::Gnu
+
+# Now the rest of Bundle::CPAN first, so that we use latest code for the following
+# installations
+#
+cpan Bundle::CPAN
+
+# mod_perl (Apache::*, Bundle::Apache, mod_perl, modPerl_hooks) is broken.
+# Usually it wants Apache httpd source to compile and keeps asking for it forever if it
+# doesn't find it.
+# we could install it without Access to sources
+#     perl -MCPAN <<'_EOF_'
+#       CPAN::HandleConfig->load;
+#       $CPAN::Config->{'makepl_arg'}='NO_HTTPD=1';
+#       CPAN::Shell->install('Apache');
+#     _EOF_
+# but its broken anyway (needs a patch to compile against
+# current perl) and the version 1.* branch has not been updated
+# for a long time. leave it out and everything which depends on it
+#cpan Bundle::Apache
+
+# Tests for GD fail
+# The seventh image in den GD.t test looks slightly
+# different. Maybe small difference in TrueType font.
+#
+# Do it first, otherwise we are pulled by Chart::Base
+#
+cpan -T GD
+
+cpan Log::Log4perl      # many module tests request this.
+
+# Now  modules (from autobundle of /usr/local/ installation and manual cleanup and some deduplication)
+#
+cpan AE
+cpan Algorithm::Diff
+cpan Algorithm::DiffOld
+cpan AnyEvent
+cpan AppConfig
+cpan Archive::Extract
+cpan Archive::Zip
+cpan Attribute::Params::Validate
+cpan Authen::SASL
+cpan B::Keywords
+cpan BerkeleyDB
+cpan Bit::Vector
+cpan CGI
+cpan CGI::Fast
+cpan CPAN::Admin
+cpan CPANPLUS
+
+# Cache::Memcached has some strange timing tests which fail from time to time
+#
+cpan -T Cache::Memcached
+cpan Capture::Tiny
+cpan Carp::Clan
+cpan Chart::Base
+cpan Class::Accessor
+cpan Class::Data::Inheritable
+cpan Class::ISA
+cpan Class::Inspector
+cpan Class::Load
+cpan Class::Singleton
+cpan Class::Tiny
+PERL5LIB=".${PERL5LIB:+:$PERL5LIB}" cpan Class::Trigger
+cpan Clone
+cpan Config::General
+cpan Config::Tiny
+cpan Crypt::OpenSSL::RSA
+cpan Crypt::OpenSSL::Random
+cpan Crypt::RC4
+PERL5LIB=".${PERL5LIB:+:$PERL5LIB}" cpan -T Crypt::SSLeay
+cpan DBD::SQLite
+cpan DBD::mysql
+cpan DBI
+cpan File::Flock          # required by Daemon::Generic
+cpan Daemon::Generic
+cpan Data::ObjectDriver
+cpan Data::OptList
+cpan Data::Stag
+cpan Date::Calendar
+cpan Date::Parse
+PERL5LIB=".${PERL5LIB:+:$PERL5LIB}" cpan Test::utf8 # required by Test::File::ShareDir::Dist
+cpan Test::File::ShareDir::Dist # required by DateTime::Locale
+cpan DateTime::Locale           # required by DateTime
+cpan DateTime
+cpan DateTime::Locale
+cpan DateTime::TimeZone
+cpan Devel::CheckLib
+cpan Devel::GlobalDestruction
+cpan Devel::InnerPackage
+cpan Devel::SelfStubber
+cpan Devel::StackTrace
+cpan Devel::StackTrace::AsHTML
+cpan Devel::Symdump
+cpan Device::SerialPort
+cpan Digest::HMAC
+cpan Digest::Perl::MD5
+cpan Digest::SHA1
+cpan Dist::CheckConflicts
+cpan Email::Abstract
+cpan Email::Address
+cpan Email::Date::Format
+cpan Email::FolderType
+cpan Email::LocalDelivery
+cpan Email::MIME
+cpan Email::MIME::Attachment::Stripper
+cpan Email::MIME::ContentType
+cpan Email::MIME::Encodings
+cpan Email::MessageID
+cpan Email::Outlook::Message
+cpan Email::Reply
+cpan Email::Send
+cpan Email::Simple
+cpan Encode::Detect
+cpan Encode::Locale
+cpan Eval::LineNumbers
+cpan Event
+cpan Exception::Class
+cpan ExtUtils::PkgConfig
+cpan FCGI
+cpan File::CheckTree
+cpan File::Copy::Recursive
+cpan -f IO::Event   # for File::Flock
+cpan File::Flock
+cpan File::FnMatch
+cpan File::HomeDir
+cpan File::Listing
+cpan File::Path::Expand
+cpan File::Remove
+cpan File::ShareDir
+cpan File::Slurp
+cpan File::Which
+cpan Filesys::Notify::Simple
+cpan Filter::Util::Exec
+cpan Font::AFM
+cpan Font::TTF
+cpan GD::Graph
+cpan GD::Graph::histogram
+cpan GD::SVG
+cpan GD::Text
+cpan Glib
+cpan Graph
+cpan Graphics::ColorNames
+cpan Graphics::ColorNames::HTML
+cpan Graphics::ColorNames::Windows
+cpan Graphics::ColorNames::Netscape
+cpan Graphics::ColorObject
+cpan HTML::Tree
+cpan HTML::Parser
+cpan HTML::Form
+cpan HTML::Formatter
+cpan HTML::Scrubber
+cpan HTML::TableParser
+cpan HTML::Tagset
+cpan HTML::TreeBuilder
+cpan HTTP::Body
+cpan HTTP::Cookies
+cpan HTTP::DAV           # note: tests fail if cpan build dir is on nfs
+cpan HTTP::Daemon
+cpan HTTP::Date
+cpan HTTP::Negotiate
+cpan HTTP::Server::Simple
+cpan Hash::MultiValue
+cpan Hook::LexWrap
+cpan IO::All
+cpan IO::CaptureOutput
+cpan IO::Multiplex
+cpan IO::Pty
+cpan IO::Socket::SSL
+cpan IO::String
+cpan IO::Stringy
+cpan IPC::Run
+cpan IPC::Run3
+cpan Inline
+cpan Inline::C
+
+# HTTP::Headers::Fast t/lazy_load_for_storable.t want to verify that
+# Storable is not loaded right away, but it is pulled in from Test::More
+#
+cpan -T HTTP::Headers::Fast;         # required by JSON::RPC
+cpan JSON
+cpan JSON::PP::Compat5006
+PERL5LIB=".${PERL5LIB:+:$PERL5LIB}" cpan Class::Accessor::Lite   # required by JSON::RPC
+cpan JSON::RPC
+cpan JSON::XS
+cpan LWP
+cpan Lingua::EN::Inflect
+cpan Linux::Inotify2
+PERL5LIB=".${PERL5LIB:+:$PERL5LIB}" cpan Linux::USBKeyboard
+cpan List::MoreUtils
+cpan Log::Message
+cpan Log::Log4perl
+cpan MIME::Tools
+cpan MRO::Compat
+cpan Mail::Box
+cpan Mail::Box::IMAP4
+cpan Mail::Box::POP3
+cpan Mail::DKIM
+cpan Mail::Util
+cpan Mail::IMAPClient
+cpan Mail::Identity
+cpan Mail::Message
+cpan Mail::Transport
+cpan Math::Bezier
+cpan Math::Calc::Units
+cpan Math::Interpolate
+cpan Math::IntervalSearch
+cpan Math::Random::ISAAC
+cpan Math::Random::ISAAC::PP
+cpan Math::Round
+cpan Math::VecStat
+cpan Module::Build
+cpan Module::Implementation
+cpan Module::Pluggable
+cpan Module::Runtime
+cpan Mojo
+cpan Mozilla::CA
+cpan Net::DNS
+cpan Net::HTTP
+cpan Net::IMAP::Client
+cpan Net::IMAP::Simple
+cpan Net::SNMP
+cpan Net::SSL
+cpan Net::SSLeay
+cpan Net::Server
+cpan NetAddr::IP
+cpan OLE::Storage_Lite
+cpan Object::Accessor
+cpan Object::Realize::Later
+cpan PDF::API2
+
+#
+# seems to fail (sometimes) with parallel builds during install:
+#  can't write to symdb /dev/shm/perl-5.28.1-0/lib/site_perl/5.28.1/x86_64-linux/PDL/pdldoc.db at blib/lib/PDL/Doc.pm line 497.
+#
+MAKEFLAGS= cpan PDL
+cpan PPITerm::UI
+PERL5LIB=".${PERL5LIB:+:$PERL5LIB}" cpan PPI::Document   # required by PPIx::Regexp
+PERL5LIB=".${PERL5LIB:+:$PERL5LIB}" cpan Task::Weaken    # required by PPIx::Regexp
+cpan PPIx::Regexp
+cpan Package::Constants
+cpan Package::DeprecationManager
+cpan Package::Stash
+cpan Package::Stash::XS
+cpan Params::Util
+cpan Params::Validate
+cpan Parse::RecDescent
+cpan PatchReader
+cpan Path::FindDev
+cpan Path::FindDev::Object
+cpan Path::IsDev
+cpan Path::Tiny
+cpan Pegex
+cpan Perl::Critic
+cpan Perl::Tidy
+cpan Plack
+cpan Pod::Coverage
+cpan Pod::LaTeX
+cpan Pod::Plainer
+cpan Pod::Spell
+cpan Probe::Perl
+cpan Readonly
+cpan Regexp::Common
+cpan Return::Value
+cpan Role::Tiny
+cpan Router::Simple
+cpan SVG
+cpan Set::IntSpan
+cpan Shell
+cpan Spreadsheet::ParseExcel
+cpan Starlink::AST
+cpan Statistics::Descriptive
+cpan Statistics::Distributions
+cpan Stream::Buffered
+cpan String::CRC32
+cpan String::Format
+cpan Sub::Exporter
+cpan Sub::Exporter::Progressive
+cpan Sub::Install
+cpan Sub::Uplevel
+cpan Switch
+cpan Task::Weaken
+cpan Template
+cpan Template::Plugin::GD
+cpan Term::UI
+cpan Test::Deep
+cpan Test::Differences
+cpan Test::Exception
+cpan Test::Fatal
+cpan Test::Inter
+cpan Test::Most
+cpan Test::NoWarnings
+cpan Test::Number::Delta
+cpan Test::Object
+cpan Test::Output
+cpan Test::Pod
+cpan Test::Pod::Coverage
+cpan Test::Requires
+cpan Test::Script
+cpan Test::SharedFork
+cpan Test::SubCalls
+cpan Test::TCP
+cpan -f Test::Taint   # test sometimes fail, because Test::More sets untainted environment variable TEST_ACTIVE
+cpan Test::Warn
+cpan Test::YAML
+cpan Text::CSV
+cpan Text::Diff
+cpan Text::Format
+cpan Text::Soundex
+cpan TheSchwartz
+cpan Tie::DBI
+cpan Tie::RDBM
+cpan Time::Date
+cpan Time::Period
+cpan Tk
+cpan Tie::Watch
+cpan Tree::DAG_Node
+cpan Try::Tiny
+cpan URI
+cpan Unix::Syslog
+cpan User::Identity
+cpan Version::Requirements
+cpan WWW::Dict::Leo::Org
+cpan WWW::Mechanize
+cpan WWW::RobotRules
+cpan XML::DOM
+cpan XML::LibXML
+cpan XML::LibXSLT
+cpan XML::NamespaceSupport
+cpan XML::Parser
+cpan XML::Parser::Lite
+cpan XML::Quote
+cpan XML::RegExp
+cpan XML::SAX
+cpan XML::SAX::Base
+cpan XML::SAX::Expat
+cpan XML::Simple
+cpan XML::Twig
+cpan XML::XPath
+cpan YAML
+cpan YAML::LibYAML
+
+cpan common::sense
+cpan inc::latest
+cpan install
+cpan local::lib
+
+cpan Date::Manip
+(
+	cd $PREFIX/build
+	test -e Donald-1.05.tar.gz || wget https://github.molgen.mpg.de/donald/Donald/archive/1.05.tar.gz -O Donald-1.05.tar.gz
+	test -d Donald-1.05 || tar xf Donald-1.05.tar.gz
+	cd Donald-1.05
+	cpan .
+)
+cpan PDL::Stats
+(
+	cd $PREFIX/build
+	test -e Pcap-0.02.tar.gz || cp /home/buczek/build/Pcap/Pcap-0.02.tar.gz .
+	test -d Pcap-0.02 || tar xf Pcap-0.02.tar.gz
+	cd Pcap-0.02
+	cpan .
+)
+
+(
+	cd $PREFIX/build
+	test -e rrdtool-1.6.0.tar.gz || wget https://oss.oetiker.ch/rrdtool/pub/rrdtool-1.6.0.tar.gz
+	test -d rrdtool-1.6.0 || tar xf rrdtool-1.6.0.tar.gz
+	cd rrdtool-1.6.0
+	./configure --prefix $PREFIX
+	make -j $(nproc)
+	cd bindings/perl-shared/
+	cpan .
+	cd ../perl-piped
+	cpan .
+)
+
+(
+	cd $PREFIX/build
+	test -e net-snmp-5.8.tar.gz || wget https://downloads.sourceforge.net/project/net-snmp/net-snmp/5.8/net-snmp-5.8.tar.gz
+	test -d net-snmp-5.8 || tar xvf net-snmp-5.8.tar.gz
+	cd net-snmp-5.8
+	patch -N -p1 < /src/mariux/patches/net-snmp-0001-Fix-incompatible-definitions-of-U64-type.patch || true
+	./configure --prefix $PREFIX
+	# make -j sometimes fails "ranlib: .libs/libnetsnmpmibs.a: Malformed archive"
+	make
+	make install
+)
+
+# Do bioperl last, because it doesn't declare all dependencies correctly
+#
+cpan Bio::Perl
+# cpan -T Bio::Biblio    # "ERROR 11 Unable to connect to database [medline" instead of xml file from net
+cpan Bio::Coordinate
+#cpan Bio::Graphics::Browser2	# GBrowse - requires Bio::DB::Sam
+#cpan Bio::DB::Sam		# Bio-SamTools   'Please enter the location of the bam.h and compiled libbam.a files'
+
+cpan -f XML::DOM::XPath   # test fails , install anyway for Bio::FeatureIO
+
+cpan Bio::FeatureIO
+cpan Bio::Tools::EUtilities
+#cpan Bio::Tools::Run::StandAloneBlast	# several tests fail - tools not available in required version
+#cpan Bio::Network::IO			# tests fail (whatever)
+
+#still missing (found by: /home/buczek/libcheck/perlcompare.pl)
+#
+#Alien::SVN		# Alien-SVN: wants SVN install, assumed obsolete
+#Apache::XMLRPC::Lite	# SOAP-Lite-1.01 : obsolete
+#B::Lint*		# B-Lint-1.20-0 : I dont think we need this
+#CGI::Apache		# mod_perl - requires Apache source and asks for it endlessly
+#UDDI::Lite		# 17 years old junk
+#XMLRPC*		# XMLRPC-Lite: dont think we still need that
+#Apache::SOAP   # depends on Apache
+
+
+# Devel::IPerl -> Markdown::Pod -> Markdent
+# Markdown::Pod (0.006) does not work with Markdent 0.27 or 0.28 because of  this change:
+# https://github.com/houseabsolute/Markdent/commit/b570af7820aa2358263b5eaf403ec96674edfe58
+#
+PERL5LIB=".${PERL5LIB:+:$PERL5LIB}" cpan ZMQ::Constants   # for Devel::IPerl
+PERL5LIB=".${PERL5LIB:+:$PERL5LIB}" cpan ZMQ::LibZMQ3     # for Devel::IPerl
+cpan DROLSKY/Markdent-0.26.tar.gz   # required by Devel::IPerl - Markdown::Pod -> Markdent.
+
+cpan ZMUGHAL/Devel-IPerl-0.008.tar.gz   # Devel::IPerl 0.009 requires ZMUGHAL/Net-Async-ZMQ which blocks during test
+#cpan Devel::IPerl
+
+cpan Text::NSP  # galonska 29.01.2018 -> helpdesk
+
+cpan Excel::Writer::XLSX  # klages 20.03.2018, helpdesk
+
+# defeat "Can't locate Makefile.PL in @INC", when Build.PL is used
+PERL5LIB=".${PERL5LIB:+:$PERL5LIB}" cpan Convert::Morse   # serious fun, kreitler
+
+cpan Math::Amoeba                                         # Multidimensional Function Minimisation (oldie but goldie:), kreitler
+
+cpan Crypt::OpenSSL::PBKDF2                               # some more crypto stuff, kreitler
+cpan Crypt::OpenSSL::AES
+cpan Crypt::Blowfish
+cpan Crypt::Blowfish_PP
+cpan Crypt::CAST5
+cpan Crypt::DES
+cpan Crypt::TripleDES
+cpan Crypt::TripleDES::CBC
+cpan Crypt::IDEA
+cpan Crypt::Rijndael
+cpan Crypt::CBC
+cpan Crypt::MCrypt
+
+cpan OpenOffice::OODoc    # The Open OpenDocument Connector
+
+cpan Digest::MD4
+cpan Data::Grove   # from xml-perl. Has some dependency issues, put at end
+
+# exit 1 # the final stop before closing
+exit