<p>I have an existing application written in Perl. Now I need to integrate this application with OBI. The plan is having a button the user can click on to open OBI in an <em>iframe</em>. OBI resides on a different server from the running application.</p>

<p>Has anyone done this before, know what is the best practice for doing this, and what is the effort of doing this? <br>
Another question is is it possible to add customizations to the OBI displayed in the <em>iframe</em>.?</p>

There are two ways to address the problem that I know of and tried out.  According to your needs, one or the other might be more appropriate (or both, they're not mutually exclusive).  In both cases, the documentation is good and readily available.
The "Go URL"
The Go URL is documented more thoroughly in the Oracle Business Intelligence Presentation Services Administration Guide. It provides a quick and easy interface to the reports you've already defined, in the form of a URL.  All that's needed to get it running is to fill in a few query parameters to direct to the report you want.  You might need to include authentication tokens too.
Pros: very easy to try out.
Cons: harder to get security right.
The web services
The presentation server comes with a series of web services that enable a more programmatic way of querying your repository.  The functionality offered through this channel goes further: for example most catalog management, including report creation and editing is possible.  The full list fills a guide of its own: the Oracle Business Intelligence Web Services Guide.
Pros: better integration (i.e., no need for an IFRAME); easier to get the security right.
Cons: harder to setup; lots of XML; more advanced features (e.g. in-place drilldown) need an HTTP bridge that was a bitch to get right in my case.  The generated HTML might clash a bit with yours and require cleaning up, notably in the CSS.