如何在不使用命令行的情况下运行Perl脚本?

我写了几个Perl脚本,可以让我更快地完成工作。 这些脚本中的每一个都使用如下命令运行:

perl PerlScript.pl InFile > OutFile 

InFile和OutFile通常都是制表符分隔的文件,其余的工作场所只能看作Excel文件。 我的同事可以从使用这些脚本中受益,但是他们被从命令行运行程序的想法吓倒了。 有一种方法可以从一个更加用户友好的界面(如GUI)运行Perl脚本吗? 我理想的解决scheme将允许他们拖动Excel文件到一个文件夹中,并用鼠标点击一个button,这将产生一个新的Excel文件,他们可以拖回到他们需要的地方。

我对Visual Basic一无所知,除了它存在,但我有一个暗示它可能是有用的这个问题。 是否有可能在Visual Basic脚本中运行Perl脚本? 一般来说,害怕命令行和计算机科学的人能够舒适地运行Visual Basic脚本是否合理呢?

注意:我的大部分同事都使用Mac OS。 Windows特定的解决scheme将会很好,因为我们有几台Windows计算机专用于任务,无论出于何种原因,都可以在Windows操作系统上轻松完成。

这听起来像是一个OSX Folder Action的完美应用程序。 基本上,你启动Automator并告诉它你想创build一个Folder Action ,它给你一个分割屏幕,你可以做的事情在左边,你开发你的脚本在右边。

将动作从左侧拖动到右侧,然后select要在顶部应用的文件夹。 然后将其从运行bash更改为使用/usr/bin/perl的Perl解释器并粘贴脚本。

然后,您只需要在该文件夹上放置一个文件,并在其上运行Perl脚本。

您可以使用Samba在System Preferences-> Sharing与您的Windows用户共享该文件夹,以便从OS X的强大function中受益。

您可以使用Shell命令在VBA中执行此操作。 这是Windows环境中的一个示例。 我不确定这些命令在OSX环境中的工作情况。

感谢Onorio Catenacci一些直接被盗的代码。

 Public Const CmdPath = "C:\Windows\system32\cmd.exe" Public Const PerlExecPath = "C:\path\to\perl\bin\perl.exe" Public Const ScriptPath = "C:\Temp\script.pl" Public Const OutputDir = "C:\Temp" Function FileExists(ByVal FileToTest As String) As Boolean FileExists = (Dir(FileToTest) <> "") End Function Function GetWorkbookIfLoaded(ByVal FileName As String) As Workbook Dim lWbName As String lWbName = Dir(FileName) If lWbName = "" Then lWbName = FileName End If On Error Resume Next Set GetWorkbookIfLoaded = Workbooks(lWbName) On Error GoTo 0 End Function Function DeleteFile(ByVal FileToDelete As String) Dim lUserOK As Boolean Dim lReturn As Boolean Dim lWbName As String Dim oBk As Workbook lUserOK = True lWbName = Dir(FileToDelete) lReturn = (lWbName = "") If Not lReturn Then Set oBk = GetWorkbookIfLoaded(lWbName) If Not oBk Is Nothing Then oBk.Close Set oBk = GetWorkbookIfLoaded(lWbName) lUserOK = (oBk Is Nothing) End If If lUserOK Then SetAttr FileToDelete, vbNormal Kill FileToDelete lReturn = True End If End If DeleteFile = lReturn End Function Sub CreateNewExcel() Dim lProceed As Boolean Dim lRetVal As Double Dim lMsgResult As VbMsgBoxResult Dim lOutputPath As String Dim lCommand As String lOutputPath = OutputDir & "\output.tab" lCommand _ = CmdPath & " /C " & PerlExecPath & " -e " _ & Chr(34) & "print qq[${\(scalar localtime)}\t1\t2\t3\t4\n]" _ & Chr$(34) & " > " & lOutputPath lProceed = DeleteFile(lOutputPath) If Not lProceed Then Exit Sub DoEvents lRetVal = Shell(lCommand, vbHide) Application.Wait (Now + TimeValue("0:00:01")) If lRetVal = 0 Or Not FileExists(lOutputPath) Then MsgBox ("Failed to run script") Else Workbooks.Open (lOutputPath) End If End Sub 

我不得不抛出一个Application.Wait调用,因为文件存在的testing有时会捕获尚未删除的文件,或者没有捕获未完全创build的文件。

我在StackOverflow的其他地方find了一些在Apple环境中执行的东西 。