Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Execute a command on release of your Dist::Zilla Distribution



Dist::Zilla::Plugin::Run - Run external commands and code at specific phases of Dist::Zilla


version 0.034


  run = script/ --dir %s --version %s
  run = script/
  eval = unlink scratch.dat

  fatal_errors = 0
  run = script/ --version %s
  run = script/
  eval = if ($ENV{SOMETHING}) {
  eval =   $_[0]->log('some message')
  eval = }

  run = script/ %s
  run = script/ %n %v
  run_no_trial = script/ %n %v

  run = script/ %s
  run = --dir %d --tgz %a --name %n --version %v
  run_no_trial = script/ --dir %d --tgz %a --name %n --version %v

  run = script/ --archive %s --version %s
  ; %p can be used as the path separator if you have contributors on a different OS
  run = --archive %s --version %s

  [Run::AfterRelease / MyAppAfter]
  run = script/ --archive %s --version %s

  run = script/ --name %n --version %v some_file.ext
  run_if_release = ./Build install
  run_if_release = make install

  run = some command %d
  eval = unlink scratch.dat
  eval = print "I just minted %n for you. Have a nice day!\n";


Run arbitrary commands and code at various Dist::Zilla phases.



Run the specific command at the specific Dist::Zilla phase given by the plugin. For example, [Run::Release] runs during the release phase.


Only run the given command if this isn't a trial build or release.


Only run the given command if this is a trial build or release.


Only run the given command if this is a release.


Only run a given command if this isn't a release.


Treats the input as a list of lines of Perl code; the code is evaluated at the specific Dist::Zilla phase given by the plugin. The code is executed in its own eval scope, within a subroutine body; @_ contains the instance of the plugin executing the code. (Remember that shift in an eval actually operates on @ARGV, not @_, so to access the plugin instance, use $_[0].)


Normally, run* commands are included in distribution metadata when used with the [MetaConfig] plugin. To bypass this, set censor_commands = 1. Additionally, this command is set to true automatically when a URL with embedded password is present.

Defaults to false.


When true, if the run command returns a non-zero exit status or the eval command dies, the build will fail. Defaults to true.


The following conversions/format specifiers are defined for passing as arguments to the specified commands and eval strings (though not all values are available at all phases).

  • %a the archive of the release (available to all *Release phases)
  • %d the directory in which the dist was built (or minted) (not in BeforeBuild)
  • %n the dist name
  • %p path separator ('/' on Unix, '\\' on Win32... useful for cross-platform dist.ini files)
  • %v the dist version
  • %t -TRIAL if the release is a trial release, otherwise the empty string
  • %x full path to the current perl interpreter (like $^X but from Config)

Additionally %s is retained for backward compatibility. Each occurrence is replaced by a different value (like the regular sprintf function). Individual plugins define their own values for the positional replacement of %s.


Torsten Raudssus <>


This software is copyright (c) 2010 by Raudssus Social Software.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.


  • Karen Etheridge <>
  • Randy Stauner <>
  • Torsten Raudssus <>
  • Nickolay Platonov <>
  • Olivier Mengué <>
  • Al Newkirk <>
  • Tatsuhiko Miyagawa <>
  • Thomas Sibley <>
Something went wrong with that request. Please try again.