# Perl

Perl is a capable, feature-rich programming language with over 38 years of development.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Speech to birdsong conversion

DevFeed: [Speech to birdsong conversion](<https://devfeed.tech/articles/speech-to-birdsong-conversion-21657.md>)

Original publisher: [Read original article](<https://www.windytan.com/2021/03/speech-to-birdsong-conversion.html>)

Author: Oona Räisänen (noreply@blogger.com)

Published: 2021-03-29T18:37:00Z

Content type: tutorial

Language: en

Sources: [Oona Räisänen](<https://devfeed.tech/sources/oona-raisanen.md>)

Topics: [Perl](<https://devfeed.tech/topics/perl.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>), [toolchain](<https://devfeed.tech/topics/toolchain.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [acoustics](<https://devfeed.tech/tags/acoustics.md>), [art](<https://devfeed.tech/tags/art.md>), [command-line](<https://devfeed.tech/tags/command-line.md>), [dreams](<https://devfeed.tech/tags/dreams.md>), [perl](<https://devfeed.tech/tags/perl.md>), [programming](<https://devfeed.tech/tags/programming.md>), [script](<https://devfeed.tech/tags/script.md>), [sound](<https://devfeed.tech/tags/sound.md>), [synthetic](<https://devfeed.tech/tags/synthetic.md>), [toolchain](<https://devfeed.tech/tags/toolchain.md>), [voice](<https://devfeed.tech/tags/voice.md>)

### AI overview

This article presents a proof-of-concept method for converting speech into synthetic blackbird song. It describes extracting speech frequency and amplitude with FM and AM demodulation, multiplying the frequency while preserving amplitude variation, and implementing the process with a Perl-SoX-csdr command-line toolchain.

### Source excerpt

I had a dream one night where a blackbird was talking in human language. When I woke up there was actually a blackbird singing outside the window. Its inflections were curiously speech-like. The dreaming mind only needed to imagine a bunch of additional harmonics to form phonemes and words. One was left wondering if speech could be transformed into a blackbird song by isolating one of the harmonics... One way to do this would be to: Find the instantaneous fundamental frequency and amplitude of the speech. For example, filter the harmonics out and use an FM demodulator to find the frequency. Then find the signal envelope amplitude by AM demodulation. Generate a new wave with similar amplitude variations but greatly multiplied in frequency. A proof-of-concept script using the Perl-SoX-csdr command-line toolchain is available (source code here). The result sounds surprisingly blackbird-like. Even the little trills are there, probably as a result of FM noise or maybe vocal fry at the end of sentences. I got the best results by speaking slowly and using exaggerated inflection. Someone hinted that the type of intonation used in certain automatic announcements is perfect for this kind of conversion. And it seems to be true! Here, a noise gate and reverb has been added to the result to improve it a little: And finally, a piece of sound art where this synthetic blackbird song is mixed with a subtle chord and a forest ambience: Think of the possibilities: A simultaneous interpreter for talking to birds. A tool for dubbing talking birds in animation or live theatre. Entertainment for cats. What other birds could be done with a voice changer like this? What about croaky birds like a duck or a crow? (I talked about this blog post a little on NPR: Here's What 'All Things Considered' Sounds Like -- In Blackbird Song)

## Understanding DNA Through a Programmer's Perspective

DevFeed: [Understanding DNA Through a Programmer's Perspective](<https://devfeed.tech/articles/dna-seen-through-the-eyes-of-a-coder-or-if-you-are-a-hammer-everything-looks-like-a-nail-36252.md>)

Original publisher: [Read original article](<https://berthub.eu/articles/posts/amazing-dna/>)

Published: 2021-01-09T13:33:46Z

Content type: article

Language: en

Sources: [Bert Hubert's writings](<https://devfeed.tech/sources/bert-hubert-s-writings.md>)

Topics: [Code](<https://devfeed.tech/topics/code.md>), [Script](<https://devfeed.tech/topics/script.md>), [Perl](<https://devfeed.tech/topics/perl.md>), [Unix](<https://devfeed.tech/topics/unix.md>), [browsers](<https://devfeed.tech/topics/browsers.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [book](<https://devfeed.tech/tags/book.md>), [code](<https://devfeed.tech/tags/code.md>), [dna](<https://devfeed.tech/tags/dna.md>), [firefox](<https://devfeed.tech/tags/firefox.md>), [perl](<https://devfeed.tech/tags/perl.md>), [presentation](<https://devfeed.tech/tags/presentation.md>), [revision](<https://devfeed.tech/tags/revision.md>), [unix](<https://devfeed.tech/tags/unix.md>), [updated](<https://devfeed.tech/tags/updated.md>)

### AI overview

A computer programmer explains DNA using programming concepts, comparing the genome to source or byte-compiled code executed by a virtual machine. The article describes DNA as a four-symbol digital language and explains how codons encode amino acids.

### Source excerpt

Updates: 12th of September 2021: I'm writing a book on DNA! If you want to become a beta reader, or have suggestions, I'd love to hear from you! 8th of January 2021: This article has been revised and updated, scientifically and in terms of dead links. Revision made by Tomás Simões (@putadagravidade / tomasprsimoes@gmail.com). Feel free to contact me if I made a mistake. 25th of August 2017: This page has led to a two-hour presentation called DNA: The code of Life as presented at SHA 2017.

## Using git-number to add Git files by reference number

DevFeed: [Using git-number to add Git files by reference number](<https://devfeed.tech/articles/git-number-to-the-command-line-rescue-25252.md>)

Original publisher: [Read original article](<https://kau.sh/blog/git-number/>)

Author: Kaushik Gopal

Published: 2020-02-19T07:00:00Z

Content type: tutorial

Language: en

Sources: [Kaushik Gopal's Site](<https://devfeed.tech/sources/kaushik-gopal-s-site.md>)

Topics: [Git](<https://devfeed.tech/topics/git.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>), [Terminal](<https://devfeed.tech/topics/terminal.md>), [Homebrew](<https://devfeed.tech/topics/homebrew.md>), [Perl](<https://devfeed.tech/topics/perl.md>)

Tags: [command-line](<https://devfeed.tech/tags/command-line.md>), [commands](<https://devfeed.tech/tags/commands.md>), [git](<https://devfeed.tech/tags/git.md>), [installation](<https://devfeed.tech/tags/installation.md>), [perl](<https://devfeed.tech/tags/perl.md>), [ruby](<https://devfeed.tech/tags/ruby.md>)

### AI overview

This tutorial presents git-number, a command-line tool that assigns reference numbers to changed files so they can be selected individually or by range in Git commands. It covers installation with Homebrew, the tool's Perl implementation, and usage notes.

### Source excerpt

If you're a programmer these days, you probably spend a large part of your day in git. If you're a command line zealot like me, you realize the holy ways of using your Terminal app for everything and aren't seduced by fancy GUIs that only stand to dissuade you from pure unbridled productivity. With that in mind, one typically finds themselves in a position where they have a few files that have changed liked so: If I had to add 2 out of those 3 files,1 typing the commands start to get a little tedious: :> git add images/content/git-0.png :> git add images/content/git-1.png Sure, if you happen to use fish (one of the nicest shells out there) the autocompletion helps reduce the tediousness. But it still doesn't beat being able to add files just by a number! What if you were presented with a git status like this: and then simply added the files by their reference number, like so: :> g add 4 :> g add 5 Wouldn't that be better? I've been doing this for years and trust me, it is! You probably won't see the difference with just a few files, but if you had 10 images being commited, then being able to simply type a range makes it a breeze to commit a bunch of files! :> g add 4-10 Installation ## So, how do you achieve something similar? Install git-number and 💥: :> brew install git-number :> git-number -s For years, I used a bunch of hand wrangled ruby files, that would help me achieve something similar but I discovered @holygeek already went through the trouble of building a much more mature version of this in Perl. Now I'm just using that version (and have gladly deleted all those scripts I had to grudgingly maintain). Notes ## Remember to git-number first ### It's important to make sure you run git-number first before running your git add <numeral> commands. I've noticed that git-number gets a little confused and tends to try issue commands on the wrong files from previous runs, if you don't (yikes). You probably want to run git-number anyway to see the status of changed f

## Why I'm Learning Perl 6

DevFeed: [Why I'm Learning Perl 6](<https://devfeed.tech/articles/why-i-m-learning-perl-6-37905.md>)

Original publisher: [Read original article](<https://www.evanmiller.org/why-im-learning-perl-6.html>)

Author: Evan Miller

Published: 2017-07-25T14:50:00Z

Content type: opinion

Language: en

Sources: [Evan Miller](<https://devfeed.tech/sources/evan-miller.md>)

Topics: [Perl](<https://devfeed.tech/topics/perl.md>), [Concurrency](<https://devfeed.tech/topics/concurrency.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Programming language](<https://devfeed.tech/topics/programming-language.md>)

Tags: [c](<https://devfeed.tech/tags/c.md>), [concurrency](<https://devfeed.tech/tags/concurrency.md>), [perl](<https://devfeed.tech/tags/perl.md>), [programming-language](<https://devfeed.tech/tags/programming-language.md>), [unicode](<https://devfeed.tech/tags/unicode.md>), [virtual-machine](<https://devfeed.tech/tags/virtual-machine.md>)

### AI overview

Evan Miller explains why he is exploring Perl 6, focusing on its runtime and concurrency capabilities. He highlights MoarVM's event-loop-aware scheduler, continuations, lightweight worker routines, and concurrent bytecode execution without a GIL, while noting that the article is not a full language review.

### Source excerpt

The Perl 6 virtual machine is a promising piece of technology: Why I'm Learning Perl 6

## Visualizing hex dumps with Unicode emoji

DevFeed: [Visualizing hex dumps with Unicode emoji](<https://devfeed.tech/articles/visualizing-hex-dumps-with-unicode-emoji-21640.md>)

Original publisher: [Read original article](<https://www.windytan.com/2014/10/visualizing-hex-bytes-with-unicode-emoji.html>)

Author: Oona Räisänen (noreply@blogger.com)

Published: 2014-10-29T23:52:00Z

Content type: tutorial

Language: en

Sources: [Oona Räisänen](<https://devfeed.tech/sources/oona-raisanen.md>)

Topics: [Emoji](<https://devfeed.tech/topics/emoji.md>), [Perl](<https://devfeed.tech/topics/perl.md>), [OpenSSH](<https://devfeed.tech/topics/openssh.md>), [Script](<https://devfeed.tech/topics/script.md>), [ssh](<https://devfeed.tech/topics/ssh.md>), [Terminal](<https://devfeed.tech/topics/terminal.md>)

Tags: [art](<https://devfeed.tech/tags/art.md>), [hex-value](<https://devfeed.tech/tags/hex-value.md>), [numbers](<https://devfeed.tech/tags/numbers.md>), [openssh](<https://devfeed.tech/tags/openssh.md>), [perl](<https://devfeed.tech/tags/perl.md>), [script](<https://devfeed.tech/tags/script.md>), [silly](<https://devfeed.tech/tags/silly.md>), [ssh](<https://devfeed.tech/tags/ssh.md>), [terminal](<https://devfeed.tech/tags/terminal.md>)

### AI overview

A Perl script visualizes SSH public key fingerprints and other colon-separated hexadecimal byte sequences by mapping each byte to a selected Unicode emoji. The article explains the byte-to-emoji mapping and notes that the script could be extended to other hex-formatted sources such as xxd.

### Source excerpt

Memorizing SSH public key fingerprints can be difficult; they're just long random numbers displayed in base 16. There are some terminal-friendly solutions, like OpenSSH's randomart. But because I use a Unicode terminal, I like to map the individual bytes into characters in the Miscellaneous Symbols and Pictographs block. This Perl script does just that: @emoji = qw( 🌀 🌂 🌅 🌈 🌙 🌞 🌟 🌠 🌰 🌱 🌲 🌳 🌴 🌵 🌷 🌸 🌹 🌺 🌻 🌼 🌽 🌾 🌿 🍀 🍁 🍂 🍃 🍄 🍅 🍆 🍇 🍈 🍉 🍊 🍋 🍌 🍍 🍎 🍏 🍐 🍑 🍒 🍓 🍔 🍕 🍖 🍗 🍘 🍜 🍝 🍞 🍟 🍠 🍡 🍢 🍣 🍤 🍥 🍦 🍧 🍨 🍩 🍪 🍫 🍬 🍭 🍮 🍯 🍰 🍱 🍲 🍳 🍴 🍵 🍶 🍷 🍸 🍹 🍺 🍻 🍼 🎀 🎁 🎂 🎃 🎄 🎅 🎈 🎉 🎊 🎋 🎌 🎍 🎎 🎏 🎒 🎓 🎠 🎡 🎢 🎣 🎤 🎥 🎦 🎧 🎨 🎩 🎪 🎫 🎬 🎭 🎮 🎯 🎰 🎱 🎲 🎳 🎴 🎵 🎷 🎸 🎹 🎺 🎻 🎽 🎾 🎿 🏀 🏁 🏂 🏃 🏄 🏆 🏇 🏈 🏉 🏊 🐀 🐁 🐂 🐃 🐄 🐅 🐆 🐇 🐈 🐉 🐊 🐋 🐌 🐍 🐎 🐏 🐐 🐑 🐒 🐓 🐔 🐕 🐖 🐗 🐘 🐙 🐚 🐛 🐜 🐝 🐞 🐟 🐠 🐡 🐢 🐣 🐤 🐥 🐦 🐧 🐨 🐩 🐪 🐫 🐬 🐭 🐮 🐯 🐰 🐱 🐲 🐳 🐴 🐵 🐶 🐷 🐸 🐹 🐺 🐻 🐼 🐽 🐾 👀 👂 👃 👄 👅 👆 👇 👈 👉 👊 👋 👌 👍 👎 👏 👐 👑 👒 👓 👔 👕 👖 👗 👘 👙 👚 👛 👜 👝 👞 👟 👠 👡 👢 👣 👤 👥 👦 👧 👨 👩 👪 👮 👯 👺 👻 👼 👽 👾 👿 💀 💁 💂 💃 💄 💅 ); while (<>) { if (/[a-f0-9:]+:[a-f0-9:]+/) { ($b, $m, $a) = ($`, $&, $'); print $b.join(" ", map { $emoji[$_] } map hex, split /:/, $m)." ".$a; } } What's happening here? First we create a 256-element array containing a hand-picked collection of emoji. Naturally, they're all assigned an index from 0x00 to 0xff. Then we'll loop through standard input and look for lines containing colon-separated hex bytes. Each hex value is replaced with an emoji from the array. Here's the output: The script could easily be extended to support output from other hex-formatted sources as well, such as xxd: Some additional methods for visualizing hex dumps and key fingerprints, from the comments section: PGP Strong Set Top 50 Fingerprint Art VizHash GD - a visual hash

## Building a deterministic profiler for mixed C and Perl code

DevFeed: [Building a deterministic profiler for mixed C and Perl code](<https://devfeed.tech/articles/getting-carried-away-with-hack-value-21904.md>)

Original publisher: [Read original article](<https://blog.nelhage.com/2010/05/hack-value/>)

Author: Nelson Elhage

Published: 2010-05-23T19:53:30Z

Content type: opinion

Language: en

Sources: [Nelson Elhage](<https://devfeed.tech/sources/nelson-elhage.md>)

Topics: [Perl](<https://devfeed.tech/topics/perl.md>), [C](<https://devfeed.tech/topics/c.md>), [debug](<https://devfeed.tech/topics/debug.md>)

Tags: [c](<https://devfeed.tech/tags/c.md>), [debug](<https://devfeed.tech/tags/debug.md>), [function](<https://devfeed.tech/tags/function.md>), [gcc](<https://devfeed.tech/tags/gcc.md>), [glibc](<https://devfeed.tech/tags/glibc.md>), [memory](<https://devfeed.tech/tags/memory.md>), [perl](<https://devfeed.tech/tags/perl.md>), [profiling](<https://devfeed.tech/tags/profiling.md>), [tools](<https://devfeed.tech/tags/tools.md>)

### AI overview

The author describes trying to improve profiling visibility in BarnOwl, a program that mixes C and Perl. Statistical profilers could show time spent in Perl but not which C functions led to those calls, so the author explores a deterministic profiler that tracks function entries and returns.

### Source excerpt

Recently, I've been working on some BarnOwl branches that move more of the core functionality of BarnOwl into perl code, instead of C (BarnOwl is written in an unholy mix of C and perl code that call each other back and forth obsessively). Moving code into perl has many advantages, but one problem is speed - perl code is obvious a lot slower than C, and BarnOwl has a lot of hot spots related to its tendency to keep tens or hundreds of thousands of messages in memory and loop over all of them in response to various commands.

## todo.pl ratmenu

DevFeed: [todo.pl ratmenu](<https://devfeed.tech/articles/todo-pl-ratmenu-21884.md>)

Original publisher: [Read original article](<https://blog.nelhage.com/2008/02/todopl-ratmenu/>)

Author: Nelson Elhage

Published: 2008-02-19T23:46:00Z

Content type: tutorial

Language: en

Sources: [Nelson Elhage](<https://devfeed.tech/sources/nelson-elhage.md>)

Topics: [To-Do](<https://devfeed.tech/topics/todo.md>), [Linux](<https://devfeed.tech/topics/linux.md>), [Perl](<https://devfeed.tech/topics/perl.md>)

Tags: [linux](<https://devfeed.tech/tags/linux.md>), [list](<https://devfeed.tech/tags/list.md>), [perl](<https://devfeed.tech/tags/perl.md>)

### AI overview

A short shell script combines todo.pl and ratmenu to display a task list for Linux users and mark a selected task as completed. The author binds it to a keyboard shortcut in XMonad.

### Source excerpt

broder has been hacking on some better quicksilver integration for Hiveminder using todo.pl. I don't use a mac, but I don't see why linux users shouldn't get fun toys to. So I hacked up the following two-liner that uses todo.pl and ratmenu to pop up a list of tasks, and mark one as completed: #!/bin/sh todo.pl | perl -ne 'push @a,$2,"todo.pl done $1" if /^#([\w]+) (.+)$/;' \ -e 'END{exec("ratmenu",@a)}' I dropped it into my ~/bin and bound it to C-t x in my window manager (XMonad).

## Lessons learned from one agile project

DevFeed: [Lessons learned from one agile project](<https://devfeed.tech/articles/lessons-learned-from-one-agile-project-30358.md>)

Original publisher: [Read original article](<https://www.mdubakov.com/posts/lessons-learned-from-my-first-xp-project/>)

Published: 2004-07-23T15:41:57Z

Content type: opinion

Language: en

Sources: [Blog by Michael Dubakov](<https://devfeed.tech/sources/blog-by-michael-dubakov.md>)

Topics: [Agile](<https://devfeed.tech/topics/agile.md>), [Test-driven development](<https://devfeed.tech/topics/tdd.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Perl](<https://devfeed.tech/topics/perl.md>), [unit tests](<https://devfeed.tech/topics/unit-tests.md>), [Refactoring](<https://devfeed.tech/topics/refactoring.md>)

Tags: [agile](<https://devfeed.tech/tags/agile.md>), [perl](<https://devfeed.tech/tags/perl.md>), [project](<https://devfeed.tech/tags/project.md>), [refactoring](<https://devfeed.tech/tags/refactoring.md>), [tdd](<https://devfeed.tech/tags/tdd.md>), [testing](<https://devfeed.tech/tags/testing.md>), [unit-tests](<https://devfeed.tech/tags/unit-tests.md>)

### AI overview

A retrospective on a small Perl project that used XP-style planning, two-week iterations, customer feedback, concise communication for managers, test-driven development, and acceptance tests. The author concludes that iterative planning, client involvement, TDD, and acceptance testing were useful, while noting uncertainty about testing controllers and instability in the SAMIE tool.

### Source excerpt

I've manage one small project (3 developers - 6 months planned). Project was canceled due to some reasons (project progress was great, so the reasons are not in development :-). I briefly describe here what we've tried and what was useful for us. I think this information will be interesting. This is real example after all. The project was on Perl. XP-style Planning. Small 2 weeks iterations. Small iteration helps to track project progress and create better estimates. Planning is quite easy and can be done in Excel without sophisticated tools like MS Project. We are going to use XP-style planning in future for high-risk projects (with new technologies, new team, or whatever make project risk high). Sure, web based tool for XP-planning can help. Customer Feedback. Manage a project without client representative is a hell on the earth. You are working like in a vacuum. No response, no feedback and no attention. You can't establish rapport with client, and there is a chance that system will not satisfy client expectations. And sure it won't. Project Manager must make every effort to get a person from the client side for feedback. Info for Top Managers. All information for top managers should be in a short and clear form. Do not send 20 pages requirements docs or lengthy emails. Top managers do not have enough time to read such docs. It is better to extract most important features and ideas at a single page and attach full document to be on the safe side. Phone Calls. Phone calls are much better than emails or IMs. Sure, phone is impolite and it is hard to clear express your thoughts, but, anyway, phone is better. Many issues can be resolved faster and easier. Test-Driven Development. We wrote unit tests for all business objects in BigEye before code, and it worked great. However, we did not have tests for controllers. Controllers are very close to GUI and they changed often (during first month). Maybe we should write unit tests for controllers as well, maybe not. This is